perm filename MONCOM.BH[S,DOC]8 blob sn#270474 filedate 1977-03-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00133 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00015 00002	                M O N I T O R   C O M M A N D   M A N U A L
C00020 00003	                   SECTION 1--INTRODUCTION FOR NEW USERS
C00021 00004	                      1.1  Introduction to Timesharing
C00030 00005	                       1.2  Timesharing at the AI Lab
C00038 00006	                       1.3  Introduction to Terminals
C00046 00007	                    1.4  Typing Commands to the Monitor
C00052 00008	                             1.5  File Storage
C00062 00009	                        1.6  LOGIN and KJOB Commands
C00065 00010	                           1.7  Editing Commands
C00070 00011	              1.8  Commands for Compiling and Running Programs
C00074 00012	                         1.9  Information Commands
C00076 00013	                       1.10  Programs and Core Images
C00080 00014	                        SECTION 2--DISPLAY TERMINALS
C00081 00015	                               2.1  Keyboards
C00088 00016	                            2.2  The Line Editor
C00099 00017	                        2.3  Line Editor Activation
C00106 00018	                       2.4  ESCAPE and BREAK Commands
C00111 00019	                             2.5  The WHO Line
C00121 00020	                         2.6  Page Printer Control
C00127 00021	                           2.7  Data Disc Control
C00143 00022	                              2.8  III Control
C00145 00023	                         2.9  Audio Switch Control
C00150 00024	            SECTION 3--TELETYPES AND OTHER NON-DISPLAY TERMINALS
C00159 00025	                     SECTION 4--BASIC MONITOR COMMANDS
C00160 00026	                           4.1  Running Programs
C00164 00027	                       4.2  Manipulating Core Images
C00171 00028	                           4.3  Starting Programs
C00176 00029	                             4.4  Detached Jobs
C00181 00030	                            4.5  Device Control
C00193 00031	                          4.6  System Information
C00201 00032	                        4.7  Miscellaneous Commands
C00204 00033	                     SECTION 5--SYSTEM PROGRAM COMMANDS
C00206 00034	                                 5.1  LOGIN
C00227 00035	                                5.2  LOGOUT
C00233 00036	                                 5.3  SNAIL
C00236 00037	                            5.4  COPY and SPOOL
C00239 00038	                                 5.5  MAIL
C00242 00039	                                 5.6  DART
C00243 00040	                                  5.7  DO
C00249 00041	                                 5.8  ZERO
C00251 00042	                                  5.9  WHO
C00259 00043	                                WHO commands
C00272 00044	                                 5.10  FIND
C00283 00045	                  5.11  Other System Information Programs
C00288 00046	                    5.12  Miscellaneous System Programs
C00296 00047	                       SECTION 6--PRIVILEGED COMMANDS
C00301 00048	                             APPENDIX 1--SNAIL
C00303 00049	                         SNAIL: EDIT-Class Commands
C00310 00050	                       SNAIL: COMPILE-Class Commands
C00312 00051	                SNAIL: DOCUMENT-Type COMPILE-Class Commands
C00314 00052	                 SNAIL: LOADBUF-Type COMPILE-Class Commands
C00319 00053	                 SNAIL: COMPILE-Type COMPILE-Class Commands
C00331 00054	                         SNAIL: More on File Names
C00333 00055	                          SNAIL: More on Switches
C00335 00056	                    SNAIL: Concatenation of Source Files
C00338 00057	                     SNAIL: Producing Symbolic Listings
C00342 00058	                SNAIL: Generating Core Images and DMP Files
C00347 00059	                          SNAIL: Library Searches
C00350 00060	                    SNAIL: Alternate Processor Features
C00354 00061	                         SNAIL: Translator Switches
C00356 00062	                           SNAIL: Loader Switches
C00358 00063	                            SNAIL: Command Files
C00361 00064	                            SNAIL: CREF Command
C00362 00065	                       SNAIL: Switch Function Summary
C00366 00066	                SNAIL: LOADER Switches and LINK Equivalents
C00370 00067	                           SNAIL: Error Messages
C00375 00068	                              APPENDIX 2--COPY
C00376 00069	                                COPY: Syntax
C00379 00070	                          COPY: General Operation
C00389 00071	                         COPY: Device Peculiarities
C00396 00072	                               COPY: Switches
C00424 00073	                           COPY: Monitor Commands
C00427 00074	                               COPY: Examples
C00430 00075	                             APPENDIX 3--SPOOL
C00439 00076	                           SPOOL: Delayed Listing
C00441 00077	                           SPOOL: Page Selection
C00442 00078	                      SPOOL: Multiple Copies of a File
C00443 00079	                       SPOOL: XSPOOL Special Features
C00449 00080	                           SPOOL: QSPOOL Command
C00451 00081	                           SPOOL: UNSPOOL Command
C00453 00082	                              APPENDIX 4--MAIL
C00454 00083	                           MAIL: The MAIL program
C00461 00084	                            MAIL: Command Format
C00469 00085	                  MAIL: Destinations and Destination Lists
C00479 00086	                           MAIL: Message Formats
C00488 00087	                         MAIL: Message File Formats
C00491 00088	                           MAIL: Command Switches
C00505 00089	                           MAIL: Dates and Times
C00514 00090	                 MAIL: Wildcard Dates and Expiration Counts
C00517 00091	                   MAIL: Mail to Other ARPA Network Hosts
C00528 00092	                           MAIL: The MAIL Command
C00533 00093	                           MAIL: The SEND Command
C00536 00094	                          MAIL: The REMIND Command
C00538 00095	                          MAIL: The GRIPE Command
C00539 00096	                          MAIL: The EVENT Command
C00543 00097	                           MAIL: The PLAN Command
C00546 00098	                          MAIL: The RETRY Command
C00547 00099	                          MAIL: The LATER Command
C00553 00100	                          MAIL: The BATCH Command
C00559 00101	                 MAIL: The REENTER Error Recovery Facility
C00564 00102	                          MAIL: Hand-Holding Mode
C00566 00103	               MAIL: Interfacing to MAIL from Other Programs
C00576 00104	                          MAIL: The CANCEL Command
C00578 00105	                           MAIL: The RCV Command
C00602 00106	                              APPENDIX 5--DART
C00609 00107	                   APPENDIX 6--SERVICE LEVEL SYSTEM (RSL)
C00615 00108	                Service Level System: Using the RSL Program
C00617 00109	                      Service Level System: IMPORTANT!
C00618 00110	                Service Level System: How to Reserve Devices
C00620 00111	               Service Level System: Other Commands Available
C00624 00112	                  Service Level System: RSL Command Syntax
C00627 00113	                      Service Level System: Semantics
C00630 00114	                            APPENDIX 7--FIXIMLAC
C00632 00115	                          APPENDIX 8--ARPA NETWORK
C00635 00116	                           ARPA Network: Glossary
C00644 00117	                       ARPA Network: The User TELNET
C00650 00118	         ARPA Network: Control Commands to TELNET, PTYJOB, and DIAL
C00660 00119	                  ARPA Network: The File Transfer Protocol
C00681 00120	                    ARPA Network: Multiple File Transfer
C00696 00121	                  ARPA Network: Connection Error Messages
C00701 00122	                  APPENDIX 9--CARE AND FEEDING OF DEVICES
C00702 00123	               Care and Feeding of Devices: The Line Printer
C00707 00124	                   Care and Feeding of Devices: DECtapes
C00709 00125	                Care and Feeding of Devices: Magnetic Tapes
C00714 00126	            Care and Feeding of Devices: Xerox Graphics Printer
C00720 00127	                Care and Feeding of Devices: User Disk Pack
C00725 00128	                 Care and Feeding of Devices: Core Storage
C00730 00129	                     APPENDIX 10--RELOADING THE SYSTEM
C00735 00130	                    APPENDIX 11--MONITOR ERROR MESSAGES
C00783 00131	                         APPENDIX 12--BIBLIOGRAPHY
C00787 00132	                    APPENDIX 13--STANFORD CHARACTER SET
C00794 00133	                                   INDEX
C00824 ENDMK
C⊗;
                M O N I T O R   C O M M A N D   M A N U A L
                              (Third Edition)
                                     by
                                Brian Harvey

                                 edited by
                                Martin Frost


STANFORD ARTIFICIAL INTELLIGENCE LABORATORY                       June, 1976
OPERATING NOTE 54.5


ABSTRACT

This  document describes  the  monitor commands  available to  users  of the
Stanford Artificial Intelligence Laboratory timesharing system, and  the use
of  the  terminals  connected  to this  system.   The  first  section  is an
introduction to the system  for new users.  Several appendices  are included
containing  documentation of  commonly  used system  programs.   This manual
supersedes SAILON 54.4.


This work  was supported  by the  Advanced Research  Projects Agency  of the
Office of the Secretary of Defense under contract DAHC15-73-C-0435.     


PREFACE TO THE THIRD EDITION

As this edition goes to press,  we foresee a large number of changes  to the
Stanford system that will affect  the content of this manual.   The hardware
changes  we plan  include  the addition  of  a KL10  central  processor, the
addition  of  more  core  memory, and  the  probable  removal  of  the PDP-6
processor.  Software developments that are expected in the next year include
support for all  the new hardware, changes  to the swapping  algorithms that
will  effectively provide  an  additional disk  drive for  the  file system,
changes  to the  file  system to  support  the new  swapping  algorithm, and
paging.

With paging software, consecutive user  pages will not need to  be allocated
in consecutive physical pages.   This core allocation scheme  will eliminate
system overhead  that presently  occurs due  to core  compaction.  Hopefully
this  improvement  will  be  translated  into  improved  response  times and
increased throughput.  In the paging  system each user will have  a 512-page
address space  which he may  allocate at will.   One of the  visible changes
that paging  will produce will  be new monitor  commands to  interrogate and
modify the status of various pages in a user's core image.

                                   --REG

ACKNOWLEDGMENTS

Several sections of this document were excerpted from  program documentation
written by  others.  Contributors  include Ralph  Gorin (SPOOL,  DART), Mike
Clancy (SNAIL), Dick Helliwell  (COPY, DO, ZERO), Martin Frost  (WHO, FIND),
Andy Moorer  (TELNET), Dan Swinehart  (FTP), Jim Stein  (RSL), and  Bo Eross
(FIXIML).  John McCarthy wrote the Introduction to Timesharing  section, and
Ralph  Gorin  and  Brian  McCune edited  and  corrected  the  manual's draft
versions.  This document  was produced on  the Xerox Graphics  Printer using
the PUB program written by Larry Tesler and improved by Rich Johnsson, Pitts
Jarvis, and Tovar.
                   SECTION 1--INTRODUCTION FOR NEW USERS


This  manual describes  the  monitor commands  used in  the  PDP-10 computer
system  at  the  Stanford  Artificial  Intelligence  Laboratory.   The first
section is an  introduction for new  users, including brief  explanations of
terminals, file storage,  and some of  the essential monitor  commands.  The
computer is operated  exclusively as a  timesharing system, and  the section
begins with an introduction to timesharing.
                      1.1  Introduction to Timesharing


A timesharing computer  system includes the computer  itself (in our  case a
PDP-10 computer made by  the Digital Equipment Corporation),  user terminals
for input to and output from the computer (in our case about 60 keyboard and
display terminals),  and a  file system  that keeps  programs, data  for the
programs, reports, and other data for the users.

The basic idea of timesharing is  to allow each user to behave as  though he
had  a  computer  to   himself  controlled  from  his  terminal.    This  is
accomplished  by having  the computer  cycle its  attention among  the users
wanting  service  in rotation.   It  does  this fast  enough  so  that small
requests are  serviced in  a time  that ranges  from a  small fraction  of a
second to a few seconds, depending on the number of people demanding service
at that instant.  If the desired computation is long, the computer will do a
bit of it, then service other people, then return to it, and so on until the
computation  is  done.   The time  taken  will  depend on  the  size  of the
computation and how busy the machine is.

At any  time the user's  terminal is interacting  with some  program.  These
programs include the timesharing monitor; editors used to  prepare programs,
documents, reports and other data; various utility programs; and  the user's
own programs.

When you  first sit down  at a  terminal, you will  be interacting  with the
monitor, and you can always get back to the monitor by pressing the CALL key
on the terminal.  The first thing you  have to do is to log in,  which tells
the monitor who  you are so  it can connect you  to the file  directory that
contains your files and can do its accounting.  The last thing you do is log
out so that the terminal and other resources you have been occupying  can be
used by someone else.

You will have a certain quota of  disk space and will be able to  keep files
such as  programs between  uses of  the computer.   Therefore, you  will not
ordinarily  need any  external  form of  storage  such as  punched  cards or
magnetic tape.  (Our computer doesn't even have punched card equipment.)

A user gets service from  programs by typing commands to the  monitor.  Some
monitor commands  perform the  service and  leave you  again talking  to the
monitor.  Others  cause a  program to  be started;  thereafter, you  have to
interact with that program in the  way prescribed by it.  When you  are done
with it, you go back to the monitor.

Your  program  also  gets  service from  the  monitor  by  means  of special
instructions, called UUOs, used  in the program.  The monitor  provides many
different  services  as  a   sort  of  subroutine  of  your   program;  most
importantly, it is responsible  for allocating resources, like  core storage
and input/output devices, among different jobs.  Therefore, input and output
must  be  done through  the  monitor  to avoid  conflicts.   These  UUOs are
documented in their own manual; this  one is about the commands you  type at
your terminal.

A typical task is to write a program in some computer language such  as SAIL
(our dialect of  ALGOL) or LISP  and then debug  the program by  running it,
checking the  results, and  changing it  until it  gives the  right answers.
This is accomplished in the following steps:

1.  First you run an editor.  (We have several, but the current  favorite is
called E.)   The editor reads  whatever you type  and displays it;  what you
type becomes the text of  the program you are writing.  However,  the editor
gives  you convenient  facilities for  going back  in your  text  and making
changes that you think  of as you go  along.  Most people don't  write their
programs  on paper,  but make  them up  as they  use the  editor.   When the
program is ready to try, you  exit from the editor back to the  monitor, and
your program is a file  on the disk with a  name you have given it.   At any
time, you can re-edit this file  to make changes in it.  You can  also print
it on the line printer to take  a copy home, and when you don't need  it any
more you can delete it.

2.  Normally, the next step is  to call a compiler to translate  the program
from a  source language into  machine language, call  the loader to  load it
into your core image,  and finally ask the computer  to run it.  You  can do
these  things  as  separate  operations,  but  facilities  are  provided for
initiating all of this with a single command.

3. When  the computer  runs your program,  it may  just produce  answers and
stop.  If  you like the  answers, perhaps you  are done.  Otherwise,  you go
back to the editor to make changes in the source file and try again.  On the
other hand, you may have written an interactive program which expects you to
type input on the terminal.  It interprets your input and gives output, then
asks for more input, etc.  Your  program may read files and write  them.  It
may  display pictures  on your  terminal.  Also,  it may  interact  with the
physical world by  reading pictures from one  of the TV cameras  attached to
the computer and by waving the mechanical arm.

4. In order to debug  a program, you may have  to do more than just  look at
the output.  Therefore, the timesharing system has facilities  for examining
and  changing the  contents  of registers  and for  putting  break-points in
programs.
                       1.2  Timesharing at the AI Lab


Our timesharing system runs on a Digital Equipment Corporation  (DEC) PDP-10
computer.  This is a  36-bit machine designed for  timesharing applications.
We currently have  458,752 words of core  storage online and expect  to have
655,360 words online in the not-too-distant future.  Our timesharing system,
derived from old DEC software, has been extensively modified for our special
requirements.

Programming languages available here  include SAIL, a version of  ALGOL with
added features  for backtracking,  list processing,  associative processing,
and  coroutining;  several  versions  of  LISP;  FAIL,  our  PDP-10 assembly
language; and the MICRO-PLANNER problem solving language.

To use the computer, you must  type a LOGIN command at your  terminal.  (See
Section 1.6 for a description  of this command.)  The monitor assigns  you a
job number, which it uses internally to keep track of you.   Associated with
your job  are various  resources, of which  the most  important is  the core
image, i.e., the simulated core storage maintained for you by the monitor so
that  your program  can use  addresses starting  from zero  although  it may
really be  located anywhere in  core while running.   Your job only  has one
core image; if you type a monitor command which causes a program to  be run,
that program replaces your old core  image.  There is no way for one  job to
run two programs at once.

As a user of the Stanford AI Lab system, you will be given a programmer name
to identify you to  the computer.  The main reason  for this is so  that the
monitor knows which files on the disk storage belong to you.  This name will
probably be your  initials.  When you  log in, you  must type in  this name,
along with a  project name which may  identify what project you  are working
on.  For example, if you  are doing homework for a Computer  Science course,
the course number might be  your project name.  The combination is  called a
project-programmer name or PPN  and is typed PRJ,PRG or  sometimes [PRJ,PRG]
when used in a  file specification.  Project "1"  is a popular name  with no
special meaning.

Ours is just about the most heavily used computer we know of.  It's  hard to
get  good  service,  especially weekday  afternoons.   Therefore,  please be
careful about leaving jobs logged in when you leave, and don't play Spacewar
during the day!  Even a job  which is not running uses up  scarce resources.
The system will automatically log out a job which has not run a  program for
a half hour (an hour at night),  even if the job is waiting for the  user to
type something on the terminal.  For example, if you are editing a  file and
have made changes which have not yet been written on the disk,  your changes
will be  lost if  you are  logged out  automatically for  not running  for a
while.  A warning message is typed five minutes before the actual logout.

Sometimes the system stops working while you are using it.  You  will notice
that characters you type no longer appear on your terminal.  In  many cases,
the system fixes itself after a  few seconds, so all that happens is  that a
few characters  you typed  are lost.  Otherwise,  someone has  to go  fix it
manually.  Sometimes it  can be gotten  to work again  so that you  can just
continue with what you were doing.  Other times, a new copy of the system is
loaded and you have to start over again.  This is called reloading.  If this
happens,  you will  see a  message to  that effect  on your  terminal.  When
editing, it is a good idea to  save your file on the disk every so  often in
case the system crashes.  If the system crashes and nobody is around  to fix
it, you may have to reload it yourself.  See Appendix 10 to find out how.

Sometimes  the  system is  stopped  intentionally for  software  or hardware
maintenance.  This downtime is scheduled in advance, and part of  the system
messages  you see  when you  log in  is a  maintenance schedule.   Some time
before the system  is taken down for  scheduled maintenance, you will  see a
warning on your terminal  which counts down to  the end.  This warns  you to
save  any  files  you  are  writing  and  stop  what  you  are  doing.  Such
maintenance is often scheduled between 5 and 7 weekday evenings.

This  document, the  Monitor Command  Manual, describes  the use  of monitor
commands  typed  in  at  terminals.   Another  manual  describes  the  UUOs,
instructions used by programs to communicate with the monitor.  Other system
information,  including documentation  of specific  system programs,  can be
found in  some printed  manuals and  on the  disk; look  at the  [S,DOC] and
[UP,DOC] file directories for program documentation.  Some  system programs,
which are invoked by special monitor commands, are written up  in appendices
to this manual.  Most of  these appendices are derived from  [UP,DOC] files.
Some of those  files are updated more  frequently than this manual  and some
aren't.  Caveat emptor.
                       1.3  Introduction to Terminals


Most terminals on this system are display terminals; the characters you type
appear  on a  display screen.   There are  also a  few Teletypes,  which use
paper, and do  not have the full  character set of our  displays.  Teletypes
are rarely used here, although there are a few connected to our system.

There are two kinds of display  terminals in use at the lab, Data  Discs and
IIIs ("triple-I").  They use the same keyboards, but have  different display
screens.  The Data Discs, which are more numerous (about 60 of them), use TV
monitors.   (The  name  Data  Disc  actually  refers  not  to  the terminals
themselves, but to the machine  in the computer room which  controls them.) 
The six IIIs are vector plotting displays, used mainly for  graphics display
programs  like Spacewar.   Unless  you are  writing a  display  program, the
difference is not too important except that the character set on the IIIs is
less legible than that on the Data Discs.

A  vacant terminal  should say  TAKE ME  I'M YOURS!   along with  a  line of
cryptic information on an  otherwise blank screen.  The  cryptic information
is the  system WHO line,  described on page  19.  If it's  completely blank,
make sure it's turned on, and that the brightness and contrast (intensity on
IIIs) are turned up.  If it  says NO DATA DISC CHANNELS LEFT, it  means that
the Data Disc, which can run only 31 terminals at once, is full.  A terminal
that is not in use is called an available terminal.

Each of  the printing  character keys  on our  terminals has  two characters
printed on it  (except the 0  key).  The bottom one  is usually a  letter or
digit, and the top one is some special character.  There are two  SHIFT keys
and a SHIFT LOCK key, which make letters upper case.  The keys which produce
the special characters are labelled TOP.  For example, hitting the  "<D" key
alone produces lower case "d"; also holding down SHIFT produces capital "D";
and holding down the TOP key makes it produce "<" (SHIFT and TOP together is
interpreted as TOP).

When you type something on  an available terminal, the available  message is
replaced  by whatever  you typed.   The characters  you type  are kept  in a
special buffer  called your line  editor until you  activate them  by typing
RETURN or one of a few other special characters.  The line editor allows you
to  change  the  contents  of the  line  by  using  special  editing command
characters.  The characters in the  line editor are displayed on  the screen
with two cursors: underlines on Data Discs and triangles on IIIs.   The left
cursor  is underneath  the first  character in  the line  editor;  the right
cursor  is  under  the place  where  the  next character  you  type  will go
(generally  the end  of the  line).   When your  line editor  is  empty, the
cursors coincide.  The  line editor commands  are explained in  Section 2.2.
Note: when you type RETURN, the monitor generally supplies a  LINE character
automatically.  RETURN signifies  a return to the  left margin, and  LINE an
advance to the next line.

To get  you started using  display terminals before  you read about  all the
line editor  commands, all  you need  to remember  is that  the BS  key will
delete the last  character, and the CLEAR  key will delete the  entire line.
The CONTROL and META keys are used for other line editor functions.

When you are done with a terminal, be sure to log it out.  Also, don't leave
anything in  the line  editor--type RETURN  before you  leave if  you're not
sure.  Your Data Disc channel will be made available soon after you log out,
but not if there is anything in the line editor.

A note on terminology: In  the body of this manual, characters  are referred
to by the  name printed on  the keyboard, e.g.,  RETURN and FORM.   In other
documentation, including  some of the  appendices to this  manual, different
notations are used.  Some of these are shown here:

function           key         other notation

break              BREAK       <BRK> [BRK]
escape             ESC         <ESC> [ESC] <ESCAPE>
call               CALL        <CALL> [CALL] ↑C
clear              CLEAR       [CLEAR] ↑U
tab                TAB         <TAB> [TAB] <HT>
form feed          FORM        <FORM> [FORM] <FF>
vertical tab       VT          <VT>
backspace          BS          <BS> [BS]
carriage return    RETURN      [RETURN] <CR> CR
line feed          LINE        <LF> LF <LINEFEED>
shift              SHIFT       <SHIFT>
top                TOP         <TOP>
alt mode           ALT         <ALT> <ALTMODE> $
meta               META        <META> β
control            CONTROL     <CONTROL> <CTRL> α

The combination of  RETURN and LINE (remember  that LINE is supplied  by the
monitor) is sometimes referred to as CRLF.
                    1.4  Typing Commands to the Monitor


What you type may be read  by different programs at different times,  so you
should be aware of what program you're talking to.  When you first type on a
vacant  terminal, you  are talking  to the  monitor's command  decoder.  You
continue to  talk to  the monitor until  you start  running a  program; then
you're generally talking to that program.  To distinguish  these conditions,
the state of the terminal is  described as monitor mode or user  mode.  When
the  monitor is  ready to  read a  command from  your terminal,  it  types a
period.  Programs usually type some special character(s) to prompt  you when
the  are  ready for  a  command; many  system  programs prompt  you  with an
asterisk.

It is  possible to type  ahead when  the system is  not waiting  for typein.
Characters you type which are not immediately read by either the  monitor or
a program are stored in your terminal's input buffer until they  are needed.
Programs can cause  this buffer to be  cleared.  For example,  some programs
ask for confirmation of certain commands, e.g., when you specify  for output
a filename which already exists.  Some such programs clear your input buffer
first and others don't, so you can get confused by typing ahead to a program
whose behavior you don't know.   Your input buffer is also cleared  when you
type CALL.

Monitor commands consist of the command name, possibly followed by arguments
separated by spaces or punctuation,  and then a RETURN.  The command  may be
typed using upper and  lower case letters interchangeably.   Monitor command
names may be typed in completely, or they may be abbreviated to only as many
letters as  are necessary  to make the  name unique;  for example,  the LOAD
command may be  abbreviated LOA, but  not LO because  there is also  a LOGIN
command.   A  few common  commands  have single-letter  abbreviations  (L is
accepted to mean LOGIN).  Only the  first six letters of a command  name are
relevant.

Some  monitor  commands are  completely  processed by  the  monitor, without
running a  program in  your core  image.  For  example, the  DAYTIME command
types the current date and  time, without disturbing your core  image.  Most
commands,  however,  require  a  program to  be  run.   The  monitor usually
requires  you  to log  in  before you  may  run programs;  there  are  a few
exceptions, to permit  system information programs  like WHO, and  of course
the LOGIN program itself.  If, when not logged in, you try to run  a program
which requires you  to be logged in,  the monitor automatically  runs LOGIN,
which will  ask you  for your project-programmer  name.  In  this situation,
when LOGIN finishes running, it will re-enter the command which you typed in
the first place, so the command will be performed without making  you retype
it.  Commands  which require login  but which refer  to a  pre-existing core
image rather  than running  a new program  (e.g., START)  do not  cause this
automatic login, but give an error message.

When you first enter a command which runs a program, the system  assigns you
a job number and types a line like

Job 19    Stanford 7.04/K 01-26-75

which tells  you what  version of  the monitor  is running  and when  it was
created, as well as your job number.  If it types

Job capacity exceeded

too many jobs are already logged in.  When a program like WHO is run without
logging in, the job  is killed when the program  exits or if the  user types
CALL.  The LOGIN program, however, leaves you logged in when it exits.

Some  of the  monitor  commands are  briefly described  starting  in Section
1.6.  The full  descriptions of all  the commands are  in Sections 4  and 5,
and in the appendices.
                             1.5  File Storage


A file  is a stored  collection of information,  perhaps a program  or data.
Most files are  stored on a permanently  available disk unit.  Files  on the
disk must be identified by name and by owner so that you can get at  the one
you want.  Files on other devices  may also be used; we have  magnetic tape,
DECtape  (a small  mag  tape unit  unique to  Digital  Equipment Corporation
machines), and paper tape,  as well as a  line printer and stuff  like that.
Whenever a program  does input or output,  it has to specify  the particular
file it wants.  A file identifier is typed in the form

DEV:FILNAM.EXT[PRJ,PRG]

some parts of  which can be  left out.  DEV  specifies the device  you want.
Generally, if you want  the disk (DSK), you  may leave out the  device name.
If you leave out the device name, leave out the colon too.  Device names may
include  a  number to  specify  a particular  unit;  thus, TTY  is  your own
terminal (all terminals used to be Teletypes, and the name stuck), but TTY26
is the  one next  to the  computer console.   Besides these  physical device
names, you  can define  logical device names  to use  in your  program.  The
monitor  command ASSIGN  is used  to make  your logical  name refer  to some
particular physical device.

Some devices, like  the disk, require the  use of filenames, and  some, like
the  line printer,  don't.  If  you specify  a filename  for a  device which
doesn't use one, the name is ignored.  Devices which require file  names are
called  directory  devices   because  they  include  special   files  called
directories which tell where the other files are.  Files are specified  by a
filename,  another  name called  the  extension,  and, on  the  disk,  a PPN
specifying  the  file's owner.   Letters  in the  filename  are  upper case,
although most programs will accept lower case letters.  The filename  is one
to six  letters or digits,  and can  say anything you  want to  identify the
file.   The  extension,  which  is optional,  is  one  to  three characters.
Although the monitor allows any SIXBIT characters (the ones with octal ASCII
codes  between 40  and 137--see  Appendix 13)  to be  used in  filenames and
extensions,  some  programs  which  read  filenames  use   some  punctuation
characters as punctuation characters and won't recognize them  in filenames.
It is best to  stick to letters and digits.   If you find that  some program
has written  a file called  @# $!.X ? in your  directory and you  are having
trouble dealing with it, you will find that several programs,  including the
COPY program for file manipulation,  use the notation ↓...↓ for  such files,
allowing any SIXBIT characters between the downarrows as part of a filename.
(You  must, of  course,  say ↓FILNAM↓.↓EXT↓  if  that's what  you  want, not
↓FILNAM.EXT↓.)  The only directory devices in this system are the disk, UDPs
(User Disk Packs), and DECtapes.

The extension of a file is generally one of a standard set used  to indicate
what sort of file it is, like SAI for a SAIL program, REL for  a relocatable
binary program as produced  by a compiler, or  DMP for a dumped  core image.
Many programs use  these standard extensions as  defaults, so you  often can
type the file name alone.

Disk files require a project-programmer name, which selects the directory to
use for the file (see page 5).   If you do not type in a PPN,  you generally
get the one you gave to LOGIN.  The disk directory for each PPN is  called a
UFD (User File Directory); the files  in a given directory are also  said to
comprise a disk area, although there is not really a physical area involved.

Files are divided into  smaller units, called records.  The  precise meaning
of a  record depends on  the particular  device you are  using, but  often a
record is the  smallest unit of  data which the  device will transfer  to or
from the computer  at a time.   For example, files  on the disk  are divided
into 200-word (octal) records.  The  disk hardware reads or writes  one such
record  at  a time.   On  magnetic tape,  you  can write  any  size records;
however, when you read the tape, each record must be read all at  once.  The
monitor provides  buffering so that  your program can  deal with the  data a
character or a word at a time.  The monitor gets a record and stores  it for
you.

The following devices are available on this system.

  DSK      the public disk
  SYS      same as DSK, but implies PPN [1,3] (system files)
  UDP1,2   user disk pack, a disk unit for private disk packs
  MTA0,1   magnetic tape drives
  DTA1-4   DECtape drives
  LPT      line printer
  XGP      Xerox Graphics Printer
  IMP      Interface Message Processor for ARPA network connections
  PTR      paper tape reader
  PTP      paper tape punch; also connected to CALCOMP plotter
  DAC      digital-to-analog and analog-to-digital converters
  TV       TV cameras
  CAR      cart transmitter
  TTYn     terminals and pseudo-teletypes (see below)
  TTY      the user's own terminal
  CTY      PDP-10 console Teletype (also called TTY120 or OPR)

A pseudo-teletype (PTY)  is a simulated  Teletype-like device used  to allow
programs  to "type"  monitor  commands.  The  program uses  special  UUOs to
output text  to the PTY,  which is then  seen by the  monitor as if  it were
typed at another terminal, with  its own TTY number.  Similarly,  text typed
out to the PTY can be read by the controlling program.  One user of  PTYs is
the program which allows people at other computers to use our system via the
ARPA network (Appendix 8).

Disk files are  copied to magnetic tape  daily, using the DART  program (see
Appendix 5).  Monitor commands which run DART can be used to  retrieve files
which have been clobbered by system failure (uncommon) or user error.
                        1.6  LOGIN and KJOB Commands


In this and the  following sections, a few  of the monitor commands  used in
creating  and  debugging a  program  are described  briefly.   More complete
descriptions come later and in other manuals.

The first thing you  have to do is log  in.  The command for this  is called
LOGIN, abbreviated L.  Your  project-programmer name is its  argument.  (See
page 5 for an explanation of project-programmer names.)  If you are named V.
I. Lenin, you might type

L 1/VIL

(The slash means that you don't want to see any system messages which you've
seen before.  You could have used a comma to see all messages or a period to
see  none at  all.)  The  monitor processes  this command  by  assigning and
typing out a job  number, and then starting  the LOGIN program in  your core
image.

If this is the first time you're logging in, LOGIN will type out

Are you sure?

to which you must type a Y.  It  will tell you that you are not known  as an
authorized user of the system,  unless your initials have been added  to the
authorized users list.   Then you get the  messages, and the  program exits.
You are now logged in.  Section 5.1 explains the LOGIN command more fully.

When you finish  doing whatever you want,  you should log out.   The command
for this is called KJOB,  abbreviated K.  No arguments are required,  just K
and RETURN.  (As with all monitor commands, your terminal must be in monitor
mode when  the command  is given.)   This command  runs the  LOGOUT program,
which types out how much computer  time you used, etc., and kills  your job.
Your  terminal will  become available  in a  few seconds  if you  don't type
anything else.  If there are no files in your directory, the  LOGOUT program
deletes the  directory.  Section  5.2 gives  more complete  documentation of
the logout procedure.
                           1.7  Editing Commands


To  enter your  program, or  to correct  it, you  will use  one of  our text
editors.  There are three editors in common use here:

1.  E.  This is the one  you'll generally use.  It is a fast  display editor
with  many  diversified features.   It  is sometimes  called  ETV  after the
monitor command by which it is invoked.

2.  SOS.  This editor is designed for use at Teletypes or  other non-display
terminals.  Files created with SOS include a line number at the beginning of
every line.  Editing commands use the line numbers to specify what  lines to
change, delete, or  whatever.  Hopefully you will  have no need to  use this
editor, since you'll be using display terminals.

3.  TECO.   This editor is  supplied by DEC.   It is extremely  powerful, in
that  it allows  you to  write  editing programs  which can  process  a file
systematically,  and it  is very  flexible about  strange characters  in the
file.   However, for  routine  editing it  is somewhat  inconvenient  to use
because it does not use the display facility of the terminals.

Each of  these editors is  described in its  own manual.  A  bibliography is
included as an appendix to this  manual.  The point to be explained  here is
how to  use monitor  commands to invoke  an editor;  we'll assume  here that
you're using E.

Suppose you  want to  write a program  called PROG  in the  SAIL programming
language.  The monitor command to create a new file with E is CETV.   So you
would type

CETV PROG.SAI

(SAI is the standard extension  for SAIL programs.)  This command  tells the
monitor  to run  E, and  tells E  to create  a new  file named  PROG.SAI.  E
remembers the  last editing command  you typed, so  later you'll be  able to
edit the file simply by entering  an ETV command without having to  type the
file name again.  (Note--LOGOUT makes E "forget" your commands, so  you have
to type the file name again when you next log in.)

The command for  editing an already  existing file with  E is ETV.   You can
enter this command with no argument  and it will remember the file  from the
last edit command, or  you can specify a  filename as with the  CETV command
above.

The other editors  (SOS and TECO) do  not read monitor  commands themselves.
Instead,  the   corresponding  monitor  commands   for  those   editors  are
interpreted by the SNAIL program, which then starts the  appropriate editor.
Later in this manual the ETV and CETV commands will be referred to as "SNAIL
commands" even though they do  not actually run SNAIL, since they  carry out
SNAIL-like functions.

There is a file you can edit to learn how to use E.  To do this, log  in and
enter the following command:

HELP ETEACH

Then just read  what appears on your  screen and follow  instructions.  This
command creates a file which you may want to delete when you are done.
              1.8  Commands for Compiling and Running Programs


Once you have typed  in your program, you have  to compile it, load  it, and
run  it.  Compilers  like SAIL  put out  relocatable binary  programs.  This
means that  the program is  in a form  which contains enough  information so
that  it can  be loaded  into  any address  in core.   Addresses  within the
program are  all considered  relative to  the program's  first word,  so the
LOADER  has to  add the  actual address  of that  word to  all  the relative
addresses in the program.  Your program can be loaded along with others, for
example a debugging program; the actual location of any program in your core
image will  depend on what  other programs are  loaded with it.   (Note that
this relocatable binary program format  has nothing to do with  the hardware
relocation discussed on page 5.)  The core image produced by the  LOADER can
be saved in a DMP (dump) file,  which can then be run directly by  a monitor
command without going through the LOADER again.

Suppose you  have typed  in your  program, PROG.SAI.   You want  to compile,
load, and run it.  You could say

EXECUTE PROG

and all  those things  would happen automatically.   SNAIL would  generate a
command  file for  SAIL telling  it  to compile  PROG.SAI and  start  up the
loader, which also gets a command file.  (SNAIL knows that it should use the
SAIL compiler because of the SAI extension in your filename.)   Again, SNAIL
remembers the command, so next time  you just have to say EXECUTE  and it'll
all  happen.  In  fact, the  editors all  have commands  which automatically
re-do the last compile-type SNAIL command.

Suppose, to make this  clearer, you find a bug  in the program.  To  fix it,
you can give the monitor command

ETV

and E will start editing PROG.SAI.

Then you use  E commands to  edit the file.  When  you're done, you  use the
exit-to-SNAIL command, which in E is CONTROL-X GO.  This  will automatically
repeat the EXECUTE command you typed before.

There are many different versions of this compilation command:  COMPILE will
just  compile the  program,  LOAD will  compile  and load,  etc.   The SNAIL
commands are listed in Section 5.3 and fully described in Appendix 1.
                         1.9  Information Commands


You  can sometimes  find out  how to  use a  system command  by  typing HELP
followed by the  command name.  Typing HELP  with no argument will  list the
kinds of help available  this way.  For instance,  if you forget how  to log
in, you can type HELP LOGIN.

To get a list  of the files in  your directory, type the  DIRECTORY command.
You can  get the list  for another disk  area by including  a PPN  in square
brackets as an argument.

You can see the status of all  the jobs on the system with the  WHO command,
abbreviated W.  You can find  out about jobs belonging to a  particular user
by typing WHERE prg (prg is the programmer name) or FINGER prg.   These type
out information about the given user's jobs; try them to find out more.  All
of these commands run programs in your core image, so you shouldn't run them
if you need the program  you have there.  These information commands  can be
run without logging in first.
                       1.10  Programs and Core Images


This section  discusses the allocation  and use of  core storage for  a job.
The PDP-10  storage is  divided into  pages of  512 words  each.  Currently,
pages are  always allocated in  pairs; thus  a job's core  image is  an even
number  of pages  in size.   (Allocation of  pages in  pairs is  expected to
disappear soon.)  A  job's core image  may be located  in any set  of actual
core pages while the program is running.

Actually, a job may  use two distinct sets  of core pages, called  the lower
and upper  segments.  The job  must have  a lower segment  in order  to run.
This segment belongs to that job alone.  If the job has an upper segment, it
may be shared with other jobs.  One use of this is to allow several users to
run the same system program with  only one copy of the program in  core; the
data for the individual users is stored in each job's lower segment, and the
common code is in the upper segment.

An upper  segment may be  write protected,  so the program  in it  cannot be
accidentally  changed.  This  is usually  done with  shared  upper segments.
Programs can  control the write  protection of their  upper segment  by UUO.
Upper segments are more fully explained in the UUO Manual.

Each upper segment  has an entry  in the system  job table, including  a job
number, a segment name, and  much of the status information  associated with
jobs.  Some  of the  monitor commands  described in  later sections  of this
manual refer to upper segments.

The lowest locations  in each lower segment,  called the Job Data  Area, are
used  by the  monitor to  store  information about  the job.   Some  of this
information is  of interest only  to the monitor,  while other parts  can be
used and modified by the  job itself.  In particular, some  monitor commands
use information from Job Data  Area words, e.g., starting addresses  for the
program.  The description of such  commands will refer to the  relevant word
by its symbolic name, of the form JOBxxx, e.g., JOBSA is the word containing
the program's normal starting address.  The complete description of  the Job
Data Area is contained in the UUO Manual.
                        SECTION 2--DISPLAY TERMINALS
                               2.1  Keyboards


Our display terminals use a character set called Stanford ASCII.  ASCII is a
standard computer character set; our version is similar to the  standard but
somewhat extended.  In particular, the "control" codes in ASCII,  which mean
things like "end of text," are used here for printing characters like  α and
∃ and ∩.   There are seven  bits in a character  code; since the  PDP-10 has
36-bit words, five  characters fit in  a word with  one bit left  over.  The
complete Stanford ASCII character set is listed in Appendix 13.

Each of  the printing  character keys  on our  terminals has  two characters
printed on it  (except the 0  key).  The bottom one  is usually a  letter or
digit, and the top one is some special character.  There are two  SHIFT keys
and a SHIFT LOCK key, which make letters upper case.  The keys which produce
the special characters are labelled TOP.  For example, hitting the  "<D" key
alone produces lower case "d"; also holding down SHIFT produces capital "D";
and holding down the TOP key with it produces "<" (SHIFT and TOP together is
interpreted as TOP).

There  are   several  special  character   codes,  generally   not  printing
characters, which are not affected by SHIFT and TOP.  One is the  space bar,
which spaces  as on any  typewriter.  The  TAB key sends  a tab  code, which
prints by spacing out to the next tab stop; these are set eight spaces apart
and cannot be changed.  The RETURN key sends a carriage return code, and the
monitor generally  provides a  line feed code  after it  automatically.  The
LINE key sends a  line feed alone; this is  not too often useful.   The FORM
key sends a form  feed code, and the VT  key a vertical tab.  These  two are
used by  some programs as  control codes, but  not often for  their printing
effect.  The BS key is backspace (in real ASCII this code is called delete).
This code  is usually not  sent to your  program, but is  taken by  the line
editor as a command to back up  the cursor.  The ALT key sends an  alt mode;
this code has  no printing significance,  but is used  as a control  code by
programs.

Although ASCII is a seven-bit code, display terminals actually send nine-bit
codes to programs.  The two extra bits represent the CONTROL and  META keys.
These keys are like SHIFT and TOP in that they are held down along with some
other key.  They have two  different functions; when the character  they are
used  with is  sent to  a  program, it  can be  used as  a  control command.
Editing and debugging  programs use such single-character  commands heavily.
For  example,  in the  E  editor,  CONTROL-META-D means  to  delete  a line.
However, the CONTROL and META keys  are also used as commands to  the system
line editor  for inserting characters  inside a line,  etc.  The use  of the
line editor is explained in Section 2.2.

There are four more keys to be described.  They are unusual in that  none of
them send characters  to your program or  to the monitor's  command decoder;
they are processed  by the monitor's keyboard  scanner and the  line editor.
CLEAR is simply a line editor command to delete the entire line in  the line
editor.  CALL is used to interrupt a program running in your core  image and
return your terminal  to monitor mode.  ESC  (escape) and BREAK are  used to
signal that the characters which follow are a special command to the display
service  routines in  the  monitor; the  many different  functions  of these
commands will  be explained  in Section 2.4  and following  sections.  There
should be a list of the ESC and BREAK commands attached to your keyboard; if
not, see page 18 to find out how to print one.

Please note that the ESC  and BREAK keys generate codes by  themselves; they
are  not  shift-like keys  as  CONTROL  and META  are.   Thus,  for example,
CONTROL-A means "press the A key while holding down CONTROL," whereas  ESC A
means "press  ESC and  then press A."   Also, the  ASCII character  which is
represented on our keyboards as  ALT is sometimes called "escape"  (the name
was changed a few years ago; another name for the same function is "prefix")
and is produced by  a key marked ESC  on some other computer  terminals, but
our ESC is not one  of the ASCII codes and  should not be typed when  ALT is
wanted.
                            2.2  The Line Editor


At a  display, the  characters you  type are  accumulated by  a part  of the
monitor called the line editor.  When you end a line by typing an activation
character,  the entire  line is  sent  to your  program (or  to  the monitor
command decoder).  Generally you will  activate a line with the  RETURN key,
although others also work.   The exact workings of activation  are discussed
in  Section 2.3,  but first,  there are  several editing  command characters
which can be used to change the text in the line editor.

There are two line editor cursors displayed on your screen.  The left cursor
is underneath the first character in the line editor and is called  the line
cursor.  The right cursor is  under the character position you are  about to
write into and is called  the character cursor.  The cursors  are underlines
on Data Discs, and triangles on IIIs.  Also, on IIIs, the characters  in the
line editor are  displayed somewhat below any  other characters on  the same
line.  If there is no text in the line editor, the two cursors coincide.

On Data Disc terminals, when there  is no text in the line editor,  you will
sometimes see a  "broken" cursor consisting of  two very short  lines.  This
means that the program you are running is waiting for a single  character to
be typed, rather than an entire  line.  The reason for this display  is that
many programs ask  you yes-or-no questions, and  some of them expect  you to
type, e.g.,  Y followed by  RETURN while  others just wait  for the  Y.  The
broken  cursor warns  you that  a RETURN  is not  expected.  However,  it is
possible for programs to wait for a single character in sneaky ways which do
not cause a broken cursor, so the warning is not perfectly reliable.

When you type a  normal character into the  line editor, it is  displayed at
the character-cursor position, replacing any other character which was there
before.   The CONTROL  and META  keys  are used  to change  the  function of
characters  typed in.   Also,  several characters  have  different functions
depending on whether or not they are typed with the character cursor  at the
end of the line.   For example, BS at the  end of the line deletes  the last
character; inside the  line, it moves the  cursor left one  position without
deleting anything.

META along with a printing character (including space and tab)  inserts that
character at the cursor position,  in front of the character  already there,
rather than replacing  the old character.   At the end  of the line,  a META
character will activate.

BS at the end  of the line deletes the  last character.  If it's not  at the
end,  BS just  backs  up the  cursor  without deleting.   People  talk about
deleting  backspace  and   non-deleting  backspace  to   distinguish  these.
CONTROL-BS  is  always   non-deleting,  and  META-BS  is   always  deleting.
(CONTROL-META-BS, like CONTROL-META-anything,  is not a line  editor command
but an activation character.)

CONTROL-SPACE is  the opposite  of CONTROL-BS: it  moves the  cursor forward
without changing the text.  SPACE alone and META-SPACE act like any printing
character.  At the end of  the line, CONTROL-SPACE does nothing  (it neither
moves the cursor nor activates).

The remaining editing commands  consist of CONTROL-something.  Some  of them
are only considered as line editor commands inside a line; at the end of the
line, they activate.  Whether or  not this is true for a  particular command
will be mentioned in each description.

CONTROL-TAB  moves the  cursor  to the  end of  the  line, as  if  you typed
CONTROL-SPACE many times.  (Inside the line only.)

CONTROL-FORM is the  opposite: it moves the  cursor to the beginning  of the
line, so the  two cursors coincide.   (Inside or end of  the line is  ok for
this one.)

CONTROL-D deletes the character above the character cursor.  (Inside only.) 
Note that this is different from META-BS, which deletes the character to the
left of the cursor.

CONTROL-S skips ahead from the  current position of the character  cursor to
the next occurrence of the  character you type next.  If the  next character
you type does not occur to the right of the cursor, nothing happens.  If the
search character is a letter, the case must match.  (Inside only.)

CONTROL-K  is like  CONTROL-S  but instead  of  moving the  cursor  it kills
characters up to (not including) the one you select.  Again, nothing happens
if the character does not occur.  (Inside only.)

CONTROL-R repeats the  last CONTROL-S or  CONTROL-K command given.   It does
not  use the  following character  as an  argument, since  it  remembers the
argument from the CONTROL-S or CONTROL-K command.  (Inside only.)

CONTROL-I enters insert mode.  In  this mode, all characters are  treated as
if you were holding down the META key, until you leave insert mode by typing
another CONTROL command,  META-character, or an activation  character.  That
is,  after  CONTROL-I,  normal  characters  typed  are  inserted  instead of
overwriting old ones, and BS is a deleting backspace.  (Inside only.)

CONTROL-number (that  is, any  decimal number typed  while holding  down the
CONTROL  key)  will cause  a  CONTROL command  immediately  following  to be
repeated that many times.   For example, CONTROL-5 CONTROL-BS will  move the
cursor left five positions.   This can be used  to repeat the BS  command as
well as CONTROL-BS, META-BS, CONTROL-SPACE, CONTROL-D, CONTROL-S  (finds the
nth occurrence), CONTROL-K, and CONTROL-R.

CLEAR will delete everything in the line editor.

CONTROL-RETURN will retrieve the last line which was edited, as long  as you
haven't typed anything since then.   That is, after you activate a  line, if
the very next character you type is CONTROL-RETURN, the line is  returned to
the line editor.  You can send the same line again by just typing RETURN, or
you can edit it.   This is very handy  when a monitor command,  for example,
fails  because  of a  spelling  error; you  can  simply  say CONTROL-RETURN,
correct the error, and say RETURN to activate the corrected command.

The TAB character is treated in a special way by the line  editor.  Commands
like CONTROL-SPACE  treat a TAB  as a single  character, so  a CONTROL-SPACE
when the  cursor points  to a  TAB will  move several  spaces to  the right.
Typing a character  without control bits,  however, only replaces  the first
space of the TAB.  There will still  be a TAB in the buffer, unless  the TAB
was positioned so that it was only equivalent to one space, in which case it
goes away completely when another character is typed over it.
                        2.3  Line Editor Activation


This section is about the  workings of line editor activation: how  the line
editor decides to release  characters to your terminal input  buffer.  There
is quite a bit of arcane  detail here, covering special cases, which  is not
generally  important to  the  user.  This  section  can be  skipped  by most
readers.

The activation mechanism can be  controlled to some extent by UUOs  given by
your program.  Specifically, your terminal can be in normal  activation mode
or special  activation mode.   In the latter  case, your  program determines
exactly  which  characters  activate.   The  program  can  also  disable the
CONTROL-RETURN function,  as well  as the automatic  insertion of  line feed
after return.   Also, programs can  choose to activate  on any  character at
all, or  to allow activation  on characters which  are normally  line editor
commands.  However, the  rest of this discussion  assumes you are  in normal
activation mode.

Any character with CONTROL or META on will activate unless it is taken  as a
meaningful line editor  command.  In particular,  META will activate  at the
end  of the  line.  CONTROL  always activates  on characters  which  are not
meaningful  line  editor  commands, e.g.,  CONTROL-A  always  activates, and
CONTROL-D  activates at  the end  of the  line only.   CONTROL-META together
always activates.  RETURN, LINE, and ALT always activate, regardless  of the
CONTROL and META  bits used.  (Actually,  in the case  of RETURN, it  is the
line  feed,  supplied  by  the  monitor,  which  is  really  the  activation
character.)

When you type an activation character, all the characters in the line editor
are transferred to your terminal's input buffer and are no  longer editable.
If your program is doing line-at-a-time input, the character which activated
the line editor may or may not be an activator for your program.  (Normally,
line editor activation characters also activate the program, but this may be
changed with special activation.  For example, the line editor  cannot store
characters with control  bits, so such  characters always activate  the line
editor if  they are not  line editor commands.   Your program  may, however,
choose not to be activated by such characters, in which case they  remain in
your  input buffer  until a  character which  does activate  the  program is
read.)  When  you type  a program  activation character  inside a  line, all
characters  in the  line editor  are moved  to your  input buffer,  but your
program  can  only read  (in  line  mode) characters  up  to  the activation
character.  The  program may ask  to get a  nine-bit representation  for the
characters, so  the CONTROL and  META bits of  the activation  character are
sent.  There is  a special kludge  in the line  editor so that  whenever you
type RETURN (without CONTROL or META),  the RETURN is put at the end  of the
line, as if  you had typed  CONTROL-TAB first.  This  is not true  for other
activation characters, so characters after the activation character won't be
editable, but won't  be available to the  program either until  you activate
again.  Most programs are written so that something fairly intuitive happens
when you activate in the middle  of the line, but it is possible  to confuse
yourself.  In particular, when you re-edit (by typing CONTROL-RETURN) a line
which  was  activated  with  something  other  than  RETURN,  the activation
character appears in  the line (without control  bits); if you  type RETURN,
you get the same old activation  character, not a RETURN at all!   There are
some peculiar things which happen if you delete the old activation character
first, though--it is possible to  have the RETURN activate the  line editor,
but  not put  in any  activation character  and not  actually  activate your
program until you type a second RETURN.
                       2.4  ESCAPE and BREAK Commands


Certain special characters  are used to control  the status of  your display
terminal.  These are processed  directly by the monitor's  keyboard scanner,
whether or not  you are in monitor  mode.  One example, mentioned  above, is
CALL.  This key stops  your program, if one  is running, and returns  you to
monitor mode.  You  can also type CONTROL-CALL  or META-CALL for  a deferred
call--the program is stopped when  it tries to read the CALL  character from
your input buffer.  Thus you can type some commands into a program, followed
by a deferred call; when the program is finished with your commands and asks
for more, it will be stopped.

There are  several commands using  the ESC and  BREAK keys.   Generally, the
format is  ESC or  BREAK, then possibly  a numeric  argument, then  a letter
which specifies  the command.  There  should be a  concise summary  of these
commands attached to your keyboard; if not, log in and type this:

HELP DDKEY

(or IIIKEY instead of  DDKEY if you are using  a III terminal) to  print the
list on the XGP.

ESC O will stop typeout  from your program.  Any characters already  in your
output buffer are  deleted, and any attempted  typeout from your  program is
ignored.  The program continues running, however.  Typeout is resumed if you
type BREAK O, or if your program reads any characters from your terminal.

Display terminals are normally in  full character set mode, which  means you
can type in upper and lower case letters.  You can leave this mode by typing
BREAK F,  which has essentially  the same effect  as pushing the  SHIFT LOCK
key.  You type ESC F to return to full character set mode.  The only use for
this that I  know of is  that you can convert  a line of  text in a  file to
upper case in E by typing BREAK F, then something like CONTROL-SPACE to load
the line into the line editor, then RETURN.  Try it.

Some programs  which read data  from your terminal  expect an "end  of file"
indication  after the  data.  The  thing to  type to  supply this  signal is
CONTROL-META-LINE.

It  is possible  to suspend  typeout from  your program  temporarily without
losing output, as  with ESC O.   Typing CONTROL-BREAK starts  this automatic
holding.   The word  HOLDING appears  at  the top  of your  screen,  and the
program is  stopped if it  tries to  type more characters  than fit  in your
output  buffer.  Automatic  holding is  released by  typing any  line editor
activation character, or CONTROL-CLEAR.

Sometimes you may  want to write  a program which  you can interrupt  with a
signal  from your  keyboard, without  having to  keep checking  for terminal
input in the program.   For example, if you  run a program which  searches a
large  data base  by command,  you may  want to  be able  to abort  a search
without  stopping the  program.   Typing ESC  I will  generate  an interrupt
condition which your  program may enable; the  use of program  interrupts is
described in the UUO Manual.
                             2.5  The WHO Line


The next set of commands have to  do with the WHO line, a display  of system
status and  the status  of a  particular job on  the top  two lines  of your
screen.  Once  you start  a WHO  line display,  it is  automatically updated
until you turn it off explicitly.  To  start a WHO line for the job  at your
terminal, type ESC W.  You can see the WHO line for another job,  job number
n, by  typing ESC n  W.  To turn  off your WHO  line display, type  BREAK W.
(Note: this  does not actually  make the WHO  line disappear on  Data Discs,
where  anything you  display  stays on  the  screen until  it  is explicitly
erased.)

One use of the WHO line is to  keep track of the progress of a job  of yours
other than the one at the terminal you're using.  To facilitate this, typing
ESC Q will display the WHO line  of the next job in the monitor's  job table
with your programmer name (or with  the same name as the job whose  WHO line
you are  already displaying, if  any).  Typing ESC  Q repeatedly  will cycle
through all such jobs.  BREAK Q does the same thing, except that it searches
the job table backwards.

This is the format of the WHO line:

     III DD JBS,TCOR  R,RCOR UCOR  NL%  DSKQ  DATE  DAY  TIME
JOB PPN TTY# QUEUE   JOBNAM SIZE RUNTIME-RP XTIME-XP DSK SEG (ALIAS)

The first line is the system WHO line:

  III      number of III terminals in use (maximum=6)
  DD       number of Data Disc channels in use (maximum=31)
  JBS      number of jobs logged in
  TCOR     total  core  of  all  jobs  (including  those  swapped  out) in
           512-word pages
  R        number of jobs actually run in the last few seconds
  RCOR     total core of the jobs counted in R
  UCOR     amount of core available for running user jobs
  NL       system null-time percentage over the last few seconds
  DSKQ     number of jobs waiting to use the disk
  DATE     today
  DAY      day of the week
  TIME     time of day (24-hr clock)

The second line refers to a particular job:

  JOB      the job number of the job being displayed
  PPN      its logged-in project-programmer name
  TTY      its terminal number (in octal) or DET for detached jobs
  #        "#" is displayed if the WHO line is not for this TTY's job
  QUEUE    the system queue that the job is in (see below)
  JOBNAM   the program being run
  SIZE     size of the job's core image
  RUNTIME  total run time since login, in minutes and seconds
  RP       RUNTIME expressed as a percentage of the job's total  wait time
           (time the job was runnable but not running)
  XTIME    incremental runtime, normally  reset on terminal input  but see
           below
  XP       XTIME as a percentage of incremental wait time
  DSKOPS   number of incremental disk operations (reset along with XTIME)
  SEGNAM   name of upper segment if any
  ALIAS    disk PPN (see below), if any

Some of  these need  more explanation.  The  QUEUE is  an indication  of the
immediate status  of the  job--is it runnable,  waiting for  input, stopped,
etc.  These are the possible queue names:

  RUNQ     The job is runnable and not waiting for I/O, etc.
  TQ       This is a high-priority run queue which jobs are in for a short
           time after leaving certain kinds of I/O wait.
  STOP     The job is stopped because  it exited, the user typed  CALL, or
           there was an error in running the job.
  NULQ     The job has no core image.
  IOWQ     The job is waiting for some input/output operation, or  for the
           completion of a SLEEP or JOBRD UUO.  This most often means that
           the job is waiting for the user to type something.
  DIOW     The  job is  waiting  for some  I/O  operation and  may  not be
           swapped out until it is completed.
  INTW     The job has suspended itself waiting for an interrupt.
  DWQ      The job  is waiting  for a  device (e.g.,  line printer)  to be
           free.
  MTQ      The job is waiting for the magnetic tape controller.
  DTQ      The job is waiting for the DECtape controller.
  DCQ      The job is  waiting for the data  controller (used for  mag and
           DEC tapes).
  CMQ      The job is not in core and needs to be brought in quickly; if a
           job stays in this queue for long, something is wrong.

Some special characters may be displayed after the queue name:

      -    The job is currently running.
      *    The job is swapped out.  A second * means the upper  segment is
           swapped out.
      ⊗    The job has been locked in core by the LOCK UUO.
      \    The job is running a spacewar module on the PDP-10.
      /    The job is running a spacewar module on the PDP-6.
      X    The job is running spacewar modules on both processors.

Some of the above may not be clear until you read the UUO Manual.  The alias
is  a PPN  used as  the default  directory for  disk files  instead  of your
logged-in PPN.  There is an ALIAS monitor command to set the alias  for your
job.

XTIME is an incremental run time, measured in minutes, seconds, and 60ths of
a  second (a  60th of  a second  is called  a tick).   It is  normally reset
whenever the program  is started by a  monitor command other  than CONTINUE,
and  also whenever  the job  is awakened  by input  from the  terminal after
having been in IOWQ waiting for such input.  Note that if you type ahead, so
that the job never enters IOWQ, terminal input will not reset XTIME.   It is
possible to inhibit resetting of XTIME with the BREAK X command (see below).
If resetting is inhibited, the character separating spaces from ticks in the
display will be " instead of ' as it usually is.

BREAK X inhibits  resetting your job's XTIME.   ESC X resumes  the automatic
resetting as described above.  Neither of these changes the current value of
your XTIME.  Typing ESC 1 X will set your XTIME to zero; BREAK 1 X  will set
it equal to your RTIME (total run time).  Both ESC 1 X and BREAK 1 X inhibit
automatic resetting, so you have to type ESC X if you want to restore this.
                         2.6  Page Printer Control


There are two  ways of printing on  display terminals.  To exploit  the full
capabilities of  the display for  graphics, display programs  can explicitly
control  the  positioning  of  points,  vectors,  or  characters.    On  III
terminals, 16 such  display programs can  be written independently,  and any
combination  of  them  activated  or displayed  at  any  time  under program
control.  These display programs are  called pieces of glass.  On  Data Disc
terminals, only one  display program can be  run on each Data  Disc channel,
although the effect of multiple pieces of glass can be gotten in a different
way by  displaying more  than one channel  on the  screen (see  Section 2.7,
which describes the video switch).

The other way of printing on a display terminal is simply to output  text to
be printed in order  as if on a  piece of paper.  The  monitor automatically
"scrolls" such output; when the area of the screen being used fills  up, the
text is moved up  a few lines, with  the top part disappearing.   Sixteen of
these pieces of paper  can be displayed at  once, on different parts  of the
screen.  At any time, one of  these pieces of paper must be selected  by the
program as the one to  receive page printer output.  The dimensions  of each
piece of paper are controlled by the program, but the currently selected one
can also be controlled from the terminal with ESC commands.

The  dimensions of  the page  printer include  several factors.   First, the
vertical position  of the  top line  of the page.   This can  be set  by the
command ESC n Y for line n.  (Lines 1 and 2 are where the WHO line goes; the
normal position is line 4.)  ESC Y resets the vertical position to normal.

The scrolling function is controlled by two parameters: the number  of lines
typed before a glitch (the upward repositioning of the text), and the number
of glitches on the page.  These are set by ESC n L for lines/glitch  and ESC
n G for glitches/screen.   The defaults are 4  glitches of 9 lines  for Data
Disc terminals, and 12 glitches of 2 lines for III terminals.  ESC L and ESC
G restore the respective counts to normal.

It is possible  to cause automatic holding,  as with CONTROL-BREAK,  every n
lines or every n  glitches.  The commands for this  are ESC n E for  every n
lines, and ESC n  J for every n glitches.   At each pause, the  word HOLDING
will appear  on the third  line of the  display.  CONTROL-CLEAR  will resume
output as usual.  ESC E and ESC J disable the respective automatic pauses.

Typing ESC  N will  normalize your page  printer.  BREAK  N will  clear your
screen, normalize the page printer, and display the text in the page  at the
normal position.  To refresh  the page printer display without  changing the
page printer geometry, type ESC P.   BREAK P will clear the screen  and then
do ESC P.  These are useful for getting rid of any noise which may appear on
your screen.  There is  a rarely-used ESC R  to refresh just the  display of
your line editor buffer.

Note: Any RESET of your job, either by the RESET UUO or automatically by the
system, eliminates all but piece of paper 0, selects that piece of paper for
further output,  and normalizes  the page printer  display.  The  UUO Manual
explains the RESET function.
                           2.7  Data Disc Control


Certain  ESC  and  BREAK  commands  have  special  functions  for  Data Disc
terminals only, and some for III terminals only.  This section is  about the
Data Disc ones.

The usual display on a  Data Disc screen is green letters  (hereafter called
"white") on  a black background.   It is also  possible to display  black on
white, by typing BREAK C.  To restore the normal white on black, type ESC C.
Both of these clear  the screen, so you have  to type ESC P to  refresh your
page  printer  display.   Black on  white  display  requires  increasing the
contrast and  brightness controls to  be visible.  This  is not  the world's
most useful feature; it is also possible, under program control,  to display
only part of the screen in black on white.

The remaining Data  Disc commands are used  to control keyboard  mapping and
the video switch.  This  device allows you to  select from the 32  Data Disc
channels, plus various TV cameras  and video synthesizers, what you  want to
see on your screen.  You can see more than one Data Disc channel at  a time,
but only one of the analog channels (the cameras).  You can select an analog
channel along  with a Data  Disc channel only  if the two  are synchronized;
e.g.,  the lounge  TV signal  can't  be combined  with a  Data  Disc channel
because the synchronization of the former is not under our control.

Data Disc channels in  use by a job may  be public or private.   Only public
channels may be selected by other users.  The channel used by a  terminal is
normally public.  The  command ESC H  hides (makes private)  your terminal's
channel; BREAK H makes it public.

A given physical Data Disc terminal is normally associated with a particular
terminal  line number.   However,  it is  possible to  associate  a physical
terminal with a different  Data Disc line number;  in effect, a user  at one
terminal can control more than one job by pretending to be at more  than one
terminal.  The terminal's TV screen and its keyboard need not  be associated
with the  same line--you can  type at one  line while watching  another.  To
avoid confusion in what follows, remember that the word "line" will  be used
to mean the  software terminal line associated  with TTY buffers and  so on;
"keyboard"  and "screen"  will  be used  for  the components  of  a physical
terminal.  (Also, "terminal" is  restricted to Data Disc terminals  for this
section.)

Each keyboard is mapped to some line; characters typed on the  keyboard will
be interpreted as input to that line (except for certain escape commands, as
explained  below,  which  always  refer  to  your  own  physical  terminal).
Normally each keyboard is mapped to its own line (that is, the line with the
same number), but  this mapping can be  changed with escape  commands.  Each
screen may or may not be tied to some line, seeing the Data  Disc channel(s)
associated with the line.  (Programs  can change the list of  channels being
seen by their associated terminal  line.)  Normally the screen will  be tied
to the same  line to which the  associated keyboard is mapped.   However, by
issuing escape commands, the user can tie his screen to some other  line, or
can untie it and explicitly select what channels to watch.

Each terminal line has associated with it a temporary and a  permanent video
switch map.   Normally both  maps select  the line's  main channel,  the one
which was assigned to  it when the first character  was typed on it  when it
was  available.   Programs  can  modify both  maps  of  their  line,  or the
temporary map alone.  (The temporary map is the one actually seen by screens
tied to  the line.)   A reset  of the job  (or a  video reset  under program
control) sets the temporary map  equal to the permanent map.   Separate from
these maps, each  physical terminal screen can  have an untied map  which is
used if the screen is not tied to any line.

The command to map your  keyboard to another line is  ESC n M, where n  is a
Data Disc line number.   The line must be  vacant, your own, or  public (see
BREAK H above) for this command  to have any effect.  Typing ESC M  will map
you back to your own line.

The command BREAK M maps your  keyboard to the line of another job  with the
same programmer name as the one to which you are currently mapped,  if there
is another such job on a Data Disc line.  The line must be set public as for
ESC n M.

The keyboard mapping commands automatically also tie your screen to the line
to which your keyboard is being  mapped.  To tie your screen to  a different
line, type BREAK n L (note that this is completely unrelated to  the ESC n L
command described earlier!), and  to tie it back  to the line to  which your
keyboard is mapped type BREAK L.

Video  switch commands  are generally  of  the form  ESC n x, where  n  is a
channel number (Data  Disc or analog channel)  and x is the  command letter.
The form BREAK n x  interprets n as  a terminal line number  if n is  in the
range of  Data Disc  lines (26 to  117).  Thus,  ESC 30 S selects  Data Disc
channel 30, but  BREAK 30 S selects whatever  channel is assigned  to TTY30.
ESC x with no  number selects the main  channel associated with the  line to
which your keyboard is mapped.  BREAK n x where n is between 3 and 6 selects
analog channel 40+n.  The reason  for this alternate notation is  that these
analog  channels are  TV receivers,  and the  BREAK n x command  selects the
sound from the corresponding TV set (see the audio switch section  below) as
well as the picture.  BREAK x with no number selects the lounge TV set.

The commands ESC n S  and BREAK {n} S (braces are  used here to  indicate an
optional argument)  untie your screen  and set its  untied map.   (Note that
ESC S with no argument is interpreted specially, as explained below.)  These
commands thus free your screen from program control, so that you will not be
affected by program video switching until you are again tied to  a terminal.
(For example, by typing a keyboard mapping command or BREAK {n} L.)

The  [ESC|BREAK] {n} T commands  (the  notation [x|y]  means "x  or  y"), in
addition to the effect described above, set a flag bit associated  with your
terminal which  indicates that when  the program on  the line to  which your
keyboard is mapped does a video switch RESET operation (either explicitly or
because of a RESET of the  job as a whole) you are automatically  re-tied to
that  terminal  as  if  you  had typed  BREAK L.   The  flag  is  cleared by
[ESC|BREAK] {n} S and by the  tying commands (the keyboard  mapping commands
and BREAK {n} L).

The commands [ESC|BREAK] {n} [A|D] add  and delete channels to and  from the
map which  you are  currently watching,  without modifying  your tied/untied
status.  More explicitly,  if you are untied,  your untied map  is modified.
If you are tied, the effect depends on whether or not the program running on
the line to which  you are tied has set  up a temporary video map  which has
not yet been  cleared by a  video reset.  If so,  only the temporary  map is
modified;  otherwise, the  temporary and  permanent maps  are  affected.  In
other words, if there is a temporary map in effect, the escape  command will
be  temporary  also.   (Note:  the  distinction  between  the  temporary and
permanent  maps  is  different  from  the  distinction  between  ESC n S and
ESC n T!  The temporary map is associated with a terminal line and is set to
the permanent map, also  associated with the line,  by a video reset  of the
job.  If you  are untied because  of either ESC n S or  ESC n T, the A  or D
command affects the untied map associated with your hardware  screen.)  Note
that if you are untied, these commands affect only what you see, but  if you
are tied, they affect other users who are tied to the same line you are.

The ESC S command with no argument is interpreted differently from the other
video switch commands.  It  ties you to the  line to which your  keyboard is
mapped, like BREAK L, and also sets that line's temporary and permanent maps
to its main  channel (the one  assigned to it when  it was first  typed on).
Thus, ESC S undoes whatever video switch manipulation your program  has done
as well as tying you to it.  It affects other users tied to the line you are
mapped to.  The  ESC N command also does  ESC S as well as  normalizing your
page printer.  Note that only  ESC S and ESC N have the effect  described in
this paragraph, not, e.g., ESC T.   ESC S, like other forms of  video switch
reset, re-ties  anyone who  is keyboard-mapped  to your  line but  untied by
[ESC|BREAK] {n} T.

While you are keyboard-mapped to another line, certain escape  comands still
refer to your own terminal: the video switch commands (S, A, D, and  T), the
audio switch commands (U and B, see below), and the map command  (M).  Other
escape commands, like ordinary characters, are applied to the line  to which
you are mapped.  BREAK L refers to your own terminal, but ESC L to  the line
to which you are mapped.

When  an  available  terminal line  is  first  typed on,  either  by  a user
physically  at  that  terminal  or  by  a  user  keyboard-mapped  there from
elsewhere, all terminals which  are keyboard-mapped there become  tied there
(they usually will have been  tied there already, but might not  have been).
Thus anyone mapped there will see the newly allocated channel.

When a terminal logs out  and becomes available, ESC M is simulated  for all
terminals keyboard-mapped to it.  Also,  any terminals which are tied  to it
are re-tied as by BREAK L.   However, screens which are untied  but watching
that terminal's channel  (e.g., which have  typed BREAK n S) will  still see
the channel.
                              2.8  III Control


At  a III  terminal, several  different display  programs, called  pieces of
glass ("pog"), may be running at once.  You can choose which of  these (zero
or more at once) are actually displayed.

ESC n S selects piece of glass  number n only.  ESC n A adds piece  of glass
n,  and ESC  n D  deletes  pog n.   If no  numeric argument  is  used, these
commands apply to all pogs, e.g., ESC D clears all pogs from the screen.

ESC C  eliminates all pogs  (your page printer  is still displayed).   It is
different from ESC D in that the display programs are  completely forgotten,
so they cannot be reselected.

Note that the selection of display programs can also be controlled by  a UUO
in your program.
                         2.9  Audio Switch Control


Associated  with  each  display  terminal  is  a  loudspeaker  which  can be
connected  to various  sound  sources under  computer control,  by  an audio
switch analogous to the video  switch for Data Disc channels.  There  are 20
(octal) audio switch input channels, numbered 0 to 17.  Only one channel can
be connected to your speaker at a time.

One  of the  input channels  is  normally silent,  but is  connected  to the
telephone paging system when a page is in progress (i.e., someone has dialed
9 on the intercom line).  When you are listening to another channel, you may
choose to be switched to the paging channel automatically when a page  is in
progress and then returned to your original channel.

The  command  ESC  n  U  will  select  audio  channel  n  and  allow  paging
interruption.  BREAK n U selects channel n and does not allow paging.  ESC U
or BREAK U selects the silence/paging channel.

At  a  Data Disc,  the  BREAK n [S|A|T] commands,  with  n between  3  and 6
inclusive, select both picture and sound from a TV  receiver.  Specifically,
video channel 40+n and audio channel 10+n are selected.   BREAK [S|A|T] with
no argument selects the lounge TV, like BREAK 5 [S|A|T].

Your program  can control the  audio switch selection  for your  terminal by
UUO.  Although programs  cannot in general  change the audio  switch setting
for another terminal,  there is a  BEEP UUO which can  be used to  cause any
terminal's loudspeaker  to be connected  to the beep  generator for  a short
time (less than  one second).  This  is used by,  e.g., the SEND  command to
call the recipient's attention to  a message on his screen.  You  can permit
or  refuse such  beep connections  by  UUO or  by escape  commands;  BREAK B
refuses beeps,  and ESC  B permits them.   Any change  to your  audio switch
setting by other means (e.g., ESC U) also cancels the effect of BREAK  B, so
you must repeat the BREAK B command after changing your selection.

As we go to press, the following audio switch inputs are connected:

  0        silence/paging
  2        Helliwell tuner
  3        digital-to-analog converter channel A
  4        digital-to-analog converter channel B
  5        beep generator
  6        AM tuner
  7        Harvey tuner
  11       Farmwald tape deck
  12       Kugell tuner
  13       old cart TV receiver
  14       new cart TV receiver
  15       lounge TV receiver
  16       conference room TV receiver
  17       KSAN

Audio inputs 13-16 correspond to video inputs 43-46.
            SECTION 3--TELETYPES AND OTHER NON-DISPLAY TERMINALS


Teletypes do not  have display screens, nor  do they have the  full Stanford
ASCII  character  set.   This  means  that  certain  things  must  be  typed
differently.

It is  possible to  use our computer  from another  computer, over  the ARPA
network, or by telephone connection.  The Teletype conventions also apply to
these connections.

The CONTROL  (CTRL) key on  a Teletype  does not produce  the same  codes as
CONTROL  on  a  display.   Instead,  it  produces  codes  which,  on display
terminals, represent some of  the TOP characters.  Most programs  which deal
with Teletypes, however, either  cleverly use only characters which  are the
same on all terminals, or  have special notations for use at  Teletypes.  In
particular, there is an  SOS representation (named after a  Teletype editor)
for  printing characters  not  found on  Teletypes, namely  a  question mark
followed by some other character.  See Appendix 13.

To get  the effect of  CALL, type CONTROL-C  twice.  (Control  characters on
Teletypes  generally echo  as  ↑<character>, so  now  you know  why  CALL on
displays prints ↑C.)  Deferred CALL is a single CONTROL-C.

Although there are several  models of Teletypes and similar  terminals, most
of ours do not have lower  case letters.  The SHIFT key on  these terminals,
like  the  TOP  key  on  our  displays,  produces  non-alphanumeric printing
characters.  Most of  these are labelled on  the Teletype keys, but  you may
not find [ (SHIFT-K), \ (SHIFT-L), or ] (SHIFT-M) labelled on some models.

There is no line editor on Teletypes.  You can delete the last  character on
a  line by  typing RUBOUT,  which prints  a backslash  and then  the deleted
character.  Successive  RUBOUTs will print  the characters deleted,  until a
non-RUBOUT,  which prints  another backslash  and then  whatever  you typed.
CONTROL-U will delete the entire line, like CLEAR on a display.

The end-of-file character for Teletypes is CONTROL-Z.  If your  program does
input   by  TTYUUO,   CONTROL-Z   is  converted   to  612   (the   code  for
CONTROL-META-LINE).  TAB is typed  as CONTROL-I.  FORM is CONTROL-L,  and VT
is CONTROL-K.  RETURN, LINE, and ALT have corresponding Teletype keys.  (The
key for ALT may  be labelled ALT MODE,  ESCAPE, or PREFIX depending  on when
the Teletype  was built;  if none of  these appears,  type CONTROL-[  to get
ALT.)

Most of the ESC and  BREAK commands have no Teletype  equivalent.  CONTROL-O
flushes typeout like ESC O.   A second CONTROL-O resumes typeout  like BREAK
O.   CONTROL-B  starts and  stops  typeout holding,  like  CONTROL-BREAK and
CONTROL-CLEAR on display terminals.

Because  several  Teletype  CONTROL-letter characters  are  used  as special
commands  to  the  system,   the  Stanford  Ascii  characters   which  these
combinations would otherwise represent are available for program  input only
from Stanford display terminals.  These characters are: α  (002, CONTROL-B),
β  (003,  CONTROL-C),  ∂  (017,  CONTROL-O),  ∃  (025,  CONTROL-U),  ~ (032,
CONTROL-Z,  converted to  612, which  is CONTROL-META-LINE  on displays--the
end-of-file character), and ≠ (033, converted to ALT, 175).

The TTY command provides some of the ESC facilities for Teletypes along with
some  other  Teletype-specific control  features.   It takes  as  argument a
keyword specifying the thing to change.  As in typing monitor commands, only
enough letters of the keyword as necessary to make it unique need  be typed.
The keyword may be  preceded by NO or  - to reset the  corresponding switch,
e.g., TTY NO TABS or TTY -TABS.  The  TTY command is legal from  displays as
well as Teletypes, but the keywords TABS, ECHO, WIDTH, FILL, and  ARROW have
no effect  on display terminals.   The keyword WIDTH  also has no  effect on
PTYs which are  not ARPA PTYs.  You  need not be logged  in to give  the TTY
command, except for the keywords UPDATE and TIME.  Here are the keywords and
their meanings:


  TABS     Declares that  the terminal has  hardware tabs, so  the monitor
           will not convert tabs to spaces on output.

  ECHO     Tells the monitor to  send back to the terminal  the characters
           you type in.

  WIDTH n  Sets  the  maximum number  of  columns for  TTY  output  to the
           decimal value n, which should be between 16 and 256.

  FILL     Tells  the  monitor to  insert  extra carriage  returns  when a
           return is typed out at the terminal, to give the  carriage time
           to return to the left margin.  This is used principally  for 30
           character per second terminals.

  ARROW    Causes  character codes  less  than 40  octal to  be  echoed as
           uparrow-letter (e.g., ↑A for octal 001) rather than as the code
           itself,  except   for  BEL (7),  TAB (11),   LF (12),  VT (13),
           FF (14), and CR (15).

  FULL     Declares that  the terminal has  lower case letters,  and lower
           case  should not  be converted  to upper  case by  the monitor.
           Equivalent to ESC F on a display; NO FULL is like BREAK F.

  WHO      Types out your job's  WHO line.  "TTY WHO n" will type  out the
           WHO line for job n; "TTY WHO 0" or "TTY -WHO" will type out the
           system WHO line.

  UPDATE   Enables  automatic  resetting  of  XTIME,  like  ESC X  from  a
           display.  NO UPDATE is like BREAK X.  See XTIME on page 19.

  TIME     Resets XTIME  and inhibits  automatic resetting,  like ESC 1 X.
           NO TIME, like BREAK 1 X, sets XTIME to the total run time.
                     SECTION 4--BASIC MONITOR COMMANDS


Commands like LOGIN  tell the monitor to  run particular system  programs in
your core image.  In this section, monitor commands which do not refer  to a
specific program are  described.  Some of them  do not refer to  programs in
your core image at all, but are handled entirely within the  monitor itself;
others  run programs,  but allow  you to  specify the  program as  a command
argument rather than implying a particular one like LOGIN.
                           4.1  Running Programs


The RUN command takes as arguments an optional device name, a file name, and
an optional core size argument.  If the first argument is not a device name,
DSK is used.  The only allowable devices are DSK, SYS, UDPn, MTAn, and DTAn.
Running programs from magnetic tape  or DECtape is not recommended.   If the
file name does not include an extension, DMP is assumed.

The core size  argument, if any, should  be a decimal number  indicating the
number of 512-word pages desired for your core image.  This must be at least
as much as the saved core image, but you can ask for more.  Certain programs
with  variable buffer  space will  use as  much as  you  initially allocate.
(Programs can increase their core size dynamically by UUO.)

If  you are  running from  magnetic tape,  the core  size must  be specified
because the  monitor cannot determine  the size of  a file on  magnetic tape
before reading it.

The program is loaded into your core image, your job name is set to the name
of  the  dump file,  and  the program  is  started at  the  starting address
specified in the dump file.

The  R command  is  used for  running system  programs.   Note that  R  is a
separate command from, and not an abbreviation for, RUN.  The command

R FOO 10

is identical to

RUN SYS:FOO 10

The SYS device is actually  the disk, but with the special  system directory
[1,3] implied.  This directory is used to store system dump files.   Any PPN
given explicitly with  the R command  is ignored; the  PPN used is  [1,3] no
matter what.

By using the GET command (abbreviated G), it is possible to load a dump file
into  your core  image without  starting it.   This command  takes  the same
arguments  as RUN,  but instead  of  starting the  program, it  types  out a
message indicating the size of  your core image and leaves your  terminal in
monitor mode.

All of the commands in this section cause a RESET of your job.
                       4.2  Manipulating Core Images


The following commands refer to words in the Job Data Area (see page  13) of
your core image.   These words are  generally set up  by the monitor  or the
LOADER.  The UUO Manual has a complete explanation of the Job Data Area.

The CORE command is used to find  out or change the size of your  core image
in 512-word pages.  CORE may be abbreviated C.  If you include  an argument,
the size of your core  image will be set to  that many pages. If you  do not
give an argument, three lines of  information are typed out in one  of these
two forms:

NNN pages               JJJ+KKK pages
MMM pages maximum       MMM pages maximum
UUU pages user core     UUU pages user core

The first form is  used if you have no  upper segment, the second if  you do
have an upper  segment.  NNN is  the current size of  your job in  pages (no
upper); JJJ is the  size of your lower segment  and KKK is the size  of your
upper segment; MMM is the  maximum size allowed for your job  (lower segment
plus  upper  segment, if  any);  and UUU  is  the amount  of  core currently
available for use  by user jobs  (i.e., core that is  not being used  by the
system).  If you give  the CORE command when you  are not logged in,  you do
not get the first line.

The command CORE 0 destroys your core image.  It also causes a  system RESET
of your job, releasing any I/O devices your program was using, etc.

The way to create  core image dump files which  can be loaded later  is with
the SAVE  command.  This takes  device, file, and  size arguments  just like
GET.   This  command  also  does  a  RESET,  and  it  does  not   save  your
accumulators.   Therefore,  the program  cannot  be continued  after  a SAVE
command, although it can be restarted.

Dump files on the disk can  be copied (in binary mode), renamed,  etc., like
any other files and will still be runnable as programs.  However, dump files
on DECtape  are written  differently from  other files,  and cannot  just be
copied by normal file operations.  Instead, to store a dump file on DECtape,
you  must load  it into  your  core image  and give  a SAVE  command  to the
monitor.

Unless  your core  image includes  DDT or  RAID (JOBDDT  nonzero),  only the
locations up to the address in JOBFF are saved.  (This does not apply if you
use a core size argument.)  JOBFF is set by the LOADER to one more  than the
highest address it loads into,  so any core which was  allocated dynamically
by your  program will not  be saved unless  the program updates  JOBFF.  I/O
buffers allocated for you by the system are allocated above JOBFF, which the
monitor then sets to the new first free address.

If your program includes an upper segment which you wish to save, you should
use the  command SSAVE.   This is just  like SAVE  in other  respects.  SAVE
never saves upper segments.

It is possible to examine and alter words in your core image individually by
monitor commands.  The command E (examine) with an octal argument  will type
the contents of  the specified address in  octal.  The DE  (deposit) command
takes three arguments in  octal: the left and  right halves of the  word you
want to deposit, and the address.  DE without the address argument  uses the
address  of the  last E  or DE  command.  E  with no  argument  examines the
location following the  last one used  by E or DE.   (Note that the  DDT and
RAID debugging  programs provide a  much more versatile  way to  examine and
modify your core image.)

If your core image includes an  upper segment (see page 13), you can  set or
clear the  write protection  bit with  the SETUWP  or CLRUWP  commands.  You
cannot  clear  write  protection  for a  sharable  upper  segment  if  it is
protected against  you.  (See the  UUO Manual for  a complete  discussion of
upper  segment  protection.)  These  commands  also take  an  optional octal
argument, which is used  to set the protection  code for the segment  if you
are permitted to change the code.
                           4.3  Starting Programs


The following commands refer to words in the Job Data Area (see page  13) of
your core image.   These words are  generally set up  by the monitor  or the
LOADER (except for  JOBREN).  The UUO Manual  has a complete  explanation of
the Job Data Area.

The START command  (abbreviated S) is generally  used to start a  program at
its normal starting address in JOBSA.  This command can also be used with an
octal  argument specifying  some other  address.  If  the octal  argument is
preceded by + or -, the number is added to or subtracted from  the program's
normal starting address to determine the desired starting address.

The REENTER command starts the  program at the reenter address  specified in
JOBREN, if there is one.  JOBREN must  be set by the program if it  wants to
use  this capability.   Program documentation  will explain  the use  of the
REENTER command for a particular  program.  An octal argument preceded  by +
(optional in this case) or - will be added to or subtracted from the reenter
address.

The DDT command starts the program  at the address in JOBDDT, if  any.  This
address is set by the LOADER  if either DDT or RAID (the  debugging programs
for Teletypes or displays) is loaded with your program.

When a program  is stopped by typing  CALL, by a UUO  in the program,  or by
various other conditions, the address of the next instruction to be executed
is stored in JOBPC.   If the job is  continuable (not stopped because  of an
irrecoverable error), the  CONTINUE command will  start it at  that address.
(The START,  REENTER, and  DDT commands  will work  even if  the job  is not
continuable,  except  for  certain  errors  which  destroy  the  core  image
irretrievably.)

All  of  the above  commands  place your  terminal  in user  mode,  that is,
anything you type  will be processed under  control of your program.   It is
also possible to  start a program, but  leave the terminal in  monitor mode.
In this case you can still  enter monitor commands which do not  affect your
core  image.   Monitor commands  which  are illegal  while  your  program is
running will give the message PLEASE TYPE ↑C FIRST.

The CSTART command is like  START but leaves your terminal in  monitor mode.
Like START, it will take the desired start address as an argument or use the
contents of JOBSA.  The CCONTINUE command is the monitor mode  equivalent of
CONTINUE.   There  is no  such  equivalent  for REENTER  or  DDT.   With the
terminal in monitor mode,  the program can still  type output on it,  but an
attempt at reading from the terminal will make the job wait (in  IOWQ) until
the terminal is placed in user mode.

The HALT command stops your program.  The monitor converts the CALL key into
this command,  so you should  never need to  type it explicitly.   (The only
time you can type  it explicitly, of course,  is if you started  the program
with CSTART or CCONTINUE.)
                             4.4  Detached Jobs


Normally, any user job  is associated with a particular  terminal.  However,
it is possible  to detach the  job so it can  continue running while  you do
something else (another job) at your terminal.  Also, the  monitor sometimes
starts up  detached jobs  itself to perform  various system  functions; such
jobs are called phantoms.

Detached jobs can run,  and do all the  things attached jobs can  do, except
that if  they try to  output to  device TTY, the  output is  lost; attempted
input from TTY makes the job wait indefinitely (until it is attached).  If a
detached program executes an EXIT UUO, the job is killed.

The DETACH command detaches your job, leaving your terminal in  monitor mode
and not logged in.  You can then log in again without affecting the old job.
DETACH takes  no arguments.   Several commands  described below  combine the
DETACH function with other useful things.  Please remember not to leave jobs
detached forever, but to log them out eventually!

The ATTACH command is  used to attach your  terminal to a detached  job.  If
you are  already logged in,  your old job  is detached.  The  ATTACH command
takes two arguments, a job number and the PPN under which that job is logged
in.  (If you are already logged in with the same PPN, you need not  give the
second  argument.)  The  job you  are attaching  must be  detached  when the
command is given.  Note that if you were displaying a WHO line for  your old
job, it will  still be displayed, indicating  the job as detached.   This is
handy for re-attaching it when you want to, in that it shows the job number.
(Typing ESC W again will, of course, display the WHO line for your new job.)

You can attach a  phantom job only if you  have the ATT privilege,  in which
case this command will also log in the phantom by turning on the JLOG bit in
its job status word.

Non-local guest users (including non-local users who are not logged  in) may
not attach jobs with a different PPN.  This implies, in particular, that the
KATTACH command (page  35), which runs LOGOUT  and then simulates  an ATTACH
command, cannot be used by non-local users even to attach to a job  with the
same PPN,  since the  ATTACH command  is done  after the  logout.  Non-local
users should  instead ATTACH the  other job and  use the KILL  command (page
32) to log out the original job.

The FORK  command will  detach your old  job and  log in a  new one.   It is
faster than  DETACH followed  by LOGIN, because  it does  not run  the LOGIN
program.  Instead, it merely copies the system information from your old job
into the new job.  In particular, if  you have an alias in your old  job, it
is copied to the new job as well.  If the system's job capacity is  used up,
so that it is impossible to start a new job, your terminal  remains attached
to the existing job.

Often you want your program to  continue running in the old job while  it is
detached.  You could say CCONTINUE and then DETACH, but the  command CDETACH
combines  these functions.   There is  also a  CFORK command  which combines
CCONTINUE and FORK.
                            4.5  Device Control


Certain I/O  devices can  only be  used by  one user  at a  time, such  as a
magnetic  tape unit.   In  some cases,  like  the line  printer,  the system
provides a  facility for  queueing print requests  so that  individual users
need not actually control the device themselves.  However, when a  user does
need to use such  a device, the ASSIGN command  is used to ensure  that only
one user at a time tries to use the device.  The ASSIGN command (abbreviated
A) can also be used to cause  a logical device name to be associated  with a
particular device.  Thereafter, any reference by your program to the logical
name will be translated into the corresponding physical device.

The command  takes two arguments,  a physical device  name, and  an optional
logical name.  The physical name can be generic: the command

ASSIGN MTA

will  select an  available mag  tape unit  (MTA0 or  MTA1) if  there  is one
available.  You can also select a particular unit explicitly.

The  logical name  feature is  sometimes used  by programs  to allow  you to
control their I/O without having to type instructions to the program itself.
For example, a program which produces a listing output might direct it  to a
particular filename  on device  name LST.  Before  running the  program, you
could type

ASSIGN DSK LST

to write the listing file on the disk, or

ASSIGN TTY LST

to type it out at your terminal.  You can also change the meaning of what is
normally a physical device name this way--the command

ASSIGN DSK LPT

will  make a  program which  was written  to write  its output  on  the line
printer use a disk file instead.   You might do this if the line  printer is
not available when you want to run the program.

Non-local  guest account  users  (see LOGIN,  Section 5.1)  cannot  use most
non-sharable devices, either  by program request  or by the  ASSIGN command.
Since there is no operator on this system, remote users have no way to mount
tapes, collect listings, etc.; hence, the monitor does not allow  such users
to attempt I/O on those devices.

The ASSIGN command is used in a special way for User Disk Packs.  A  UDP may
be used as a public or a private device.  In the former case, other jobs may
use  the same  UDP at  the  same time,  as with  the system  file  disks.  A
privately assigned UDP, however, is restricted to the one job which assigned
it.  (Note:  a privately  assigned UDP is  still a  sharable device,  in the
sense  that   the  job  which   owns  it  can   operate  on   several  files
simultaneously, unlike  non-sharable devices like  DECtape drives,  on which
only one operation  can be in  progress at any time.)   A UDP is  normally a
file-structured  device,  with  a  directory  structure  just  like  the one
described  for the  main file  disk  in Section  1.5.  However,  it  is also
possible to  use a  UDP as an  unstructured device,  in which  allocation of
storage on the disk pack is done explicitly by the user program.   This mode
of using the  UDP is called old  mode (because it used  to be the  only mode
available).  The format of the ASSIGN command for a UDP is

ASSIGN mode UDPn logical-name

The optional mode argument can be

  PUBLIC   public access, file structured UDP
  PRIVATE  private access, file structured UDP
  OLD      private access, non-structured UDP

The default mode is PUBLIC.  A later ASSIGN command for the same  device can
be used to change the mode from PRIVATE to PUBLIC, or from PUBLIC to PRIVATE
if no other jobs  are using the device.  However,  to change into or  out of
OLD mode, the device must first be deassigned by all jobs using it.  This is
because a particular pack either  is or isn't formatted for  file structured
use, and the mode  given in the ASSIGN command  must agree with that  of the
pack itself.  (A mismatch is not detected when you give the  ASSIGN command,
but will be caught when your program actually tries to use the device.)  The
only exception is that a file-structured pack may be read, but  not written,
in OLD mode.

Because of the  need to distinguish between  the two different  UDP formats,
your program will not be allowed  to open the UDP unless it is  already open
or assigned.  Thus, when you first mount a UDP you must ASSIGN it to specify
the mode.  When a UDP has been  assigned in PUBLIC mode by one job,  any job
may use it without assigning it.

We  currently have  two drives  for  user disk  packs: UDP1  and  UDP2.  The
monitor treats  UDP as a  generic device name;  the command  ASSIGN UDP will
select a free drive  if there is one.   An ASSIGN command which  specifies a
particular  drive in  PUBLIC mode,  e.g., ASSIGN UDP2,  will succeed  if the
particular drive is not in use or if it is in PUBLIC use.  For  more details
on the use of user packs, see the UUO Manual.

Once you have assigned a device (other than a UDP) with the  ASSIGN command,
no other  job can use  it until  you release it  with the  DEASSIGN command.
This command,  abbreviated D, takes  either a logical  or a  physical device
name as argument.  (Note--Assigning DSK or SYS does not prevent  other users
from using the disk.)  It is possible for a program to use a device which is
not assigned, but the device is released in that case as soon as the program
stops using  it.  The DEASSIGN  command with no  argument will  deassign all
devices assigned by your job.

Because  UDPs can  be assigned  in a  way which  permits public  access, the
DEASSIGN  command for  a UDP  types a  message at  your  terminal indicating
whether or not  the pack should be  dismounted.  If you interrupt  a program
which is using a  UDP and deassign the UDP,  it will still be  considered in
use by your program until you reset it (for example, by the CORE 0 command).
You will  then be told  that you may  dismount the pack.   Also, there  is a
light  mounted near  the drives  labelled "don't  unload UDP2"  which  is on
whenever  UDP2 is  assigned or  inited by  a program.   When  the Librascope
swapping  disk is  down (currently  the normal  case), UDP1  is used  by the
system for swapping.

The job  which has a  device assigned may  give it to  another job  with the
REASSIGN command.  This command takes  two arguments, the device name  and a
job number.  This can occasionally be useful if, for example, one job writes
a tape which  another should then read.   The REASSIGN command  prevents the
possibility  of  another job  grabbing  the tape  unit  before  the intended
recipient does.

The FINISH command (abbreviated F) is like DEASSIGN except that  it releases
the device from your program as well as from the ASSIGN  command assignment.
If the device is a directory device which your program had open  for output,
the file is closed so that as much data as the program wrote will  be saved.
(This applies in the case in which the program was stopped before its normal
exit, either  by CALL  or by  an error.)   F with  no argument  releases all
devices.

The  FLUSH command  is  used to  empty the  input  and output  buffers  of a
terminal which  is not  in use.   It takes  a device  name as  argument; the
device must be a terminal which  is not in use, or your own  terminal.  This
command may be used without logging  in.  A user with the DEV  privilege can
use this command on any TTY whether it is in use or not.
                          4.6  System Information


Several commands exist to find out various things about your job  or others.
Some of  these duplicate information  available on the  WHO line  at display
terminals.  None of the commands in this section affect your core image.

The PJOB command types the job  number of your job, if you give  the command
with no argument.  If  you use a device name  as the argument, it  types the
number of the job using the device.   (If the device is not in use,  it says
so.)  The argument can be a name  of the form DDn, to find out who  is using
Data Disc channel n.  You will be told the TTY line number, if any,  as well
as the job number.  Also, if the argument is a UDP, the command may type out
UDP1 PUBLIC if applicable, and will  type a job number only if that  job has
assigned the drive as PRIVATE or OLD.

The PPPN command  prints out the  logged in PPN and  the alias, if  any, for
your own job (no argument) or the job number you give as argument.

The PTTY command prints out the terminal line number of your own  or another
job.  If the terminal is a Data Disc, it also prints the channel number.

The TIME command,  which also takes an  optional job number  argument, types
out four  quantities for  the specified job,  the first  three of  which are
times in hours:minutes:seconds'ticks (a tick is one sixtieth of a second):

  Total    is the total run time for the job.
  Incrementis the run time since the last time a TIME command for this job
           was given by  the job itself.  That  is, the Increment  time is
           reset when you  give a TIME command  for your own job,  but not
           when you give one for another job.
  Wait     is the time the job  has had to wait for the  system, including
           time spent  in RUNQ and  disk I/O wait,  but not tty  I/O wait,
           STOP,  etc.  It  is somewhat  of a  measure of  the  quality of
           service the job is getting.
  PS       (Page-Seconds) is a measure of the demands the job has  made on
           the system.  It is incremented by the job's core size  in pages
           for every second of runtime.

The command TIME 0  types the amount of  time since the last  system reload,
the percentage  of that  time spent  in core  shuffling, and  the percentage
spent running the null job (what the system does when there are no real jobs
it can run).  It also types some extra information for the benefit of system
wizards, which varies  with their interests at  the moment and  is generally
not meaningful to users, e.g.,  the percentage of time spent in  the monitor
at interrupt level.

The DAYTIME  command with  no argument types  the current  day of  the week,
date, and  time.  With a  job number  argument, it types  the time  that job
logged  in, the  time it  was last  run, and  the current  time.   DAYTIME 0
specifies your own job.   If the job has  been logged in since  the previous
day, dates (day of the month) are typed along with the three times.

The RESOURCES  command lists  the available system  resources: it  types the
number of free blocks on the  file disk, and the names of free  devices (mag
tape, etc.)  other than the  disk, IMP, and  terminals.  A separate  line is
typed for each  UDP drive unless  the drive is  detached from the  system or
being used  for swapping.   The line contains  just the  device name  if the
drive is free;  otherwise it indicates whether  it is PUBLIC or  PRIVATE; if
the drive has a file-structured  pack mounted, its name (volume ID)  and the
number of free blocks, as for the DSK device, will be typed if known  to the
monitor.  (That is, the name will be typed if any input/output operation has
actually happened on that pack since it was mounted.)

The  FILES command  lists  disk files  in use  by  a job,  with  some status
information.  It can take a job number argument (0 or no argument means your
own job),  in which  case all  files in  use by  that job  are listed,  or a
filename  argument,  in which  case  the  status of  the  specified  file is
displayed (if it is being used by any job).  Each line typed by this command
contains the job number of the job using the file; the  filename, extension,
and directory ppn of the file; the number of records in the file; the number
of the record currently being read or written; and the way the file is being
used: R for read, W for write, or RA for read-alter, possibly followed  by E
for end-of-file seen.  The letter U indicates that the file is on a UDP.

The HELLO command types the name of the current version of the monitor.

All  of the  above  commands are  legal when  you  are not  logged  in.  The
following one is not.

The SLEVEL command  types out your  current service level  reservation.  The
service level system  attempts to guarantee  the reserved percentage  of the
computer's  time to  programmers who  make such  reservations.  See  the RSL
command, in Appendix 6.
                        4.7  Miscellaneous Commands


The ALIAS command is used to set your job's disk PPN or alias.  If  you have
an alias, all disk references by  your job which do not include  an explicit
PPN will use the alias  directory rather than your logged-in  PPN directory.
The argument can be PRJ,PRG to set the alias to that PPN, or just PRJ to use
your login programmer name in the alias.  An argument of PRJ, (i.e.,  with a
comma but no prg) uses  your old alias programmer name.  No  argument resets
your alias to zero, so your  logged-in PPN will be used for disk  files.  If
you have an alias, your  logged-in PPN is still checked for  file protection
purposes.

The TALK  command can be  used to talk  to a user  at another  terminal.  It
takes a device name as argument.  The device must be a terminal,  which must
be in monitor  mode and must  not have any  characters in its  input buffer.
(Device CTY,  the PDP-10  console Teletype, is  never busy;  TALK CTY always
succeeds.   Note to  remote  users: There  is  no operator  on  this system;
TALK CTY is not a good way to get assistance!)  If the command succeeds, all
characters you type are typed out on the other terminal, and vice versa.  If
the terminal you specify  was already in a talk  ring, you are added  to the
ring; all characters  typed at any  terminal in the  ring appear on  all the
others.  You leave the talk ring by typing CALL.  You need not be  logged in
to enter a talk ring.

The KILL command can be used to kill another job with your  programmer name.
It takes the job number as its argument.
                     SECTION 5--SYSTEM PROGRAM COMMANDS


The remaining monitor  commands all run  particular system programs  in your
core  image.  There  are  a few  main groups  of  these commands  and  a few
miscellaneous ones.  These commands  are documented along with  the programs
they run.  The next two sections are about the LOGIN and LOGOUT programs and
the commands  which run  them; these were  briefly introduced  earlier.  The
major  command  groups are  then  presented, and  finally  the miscellaneous
system  programs.   Many system  programs  are not  run  by  special monitor
commands, but by the R command.  Those programs are not documented here, but
in separate manuals.
                                 5.1  LOGIN


The LOGIN command is used to begin a session of using the computer.  It runs
the  LOGIN program,  which  provides several  optional services  as  well as
setting up the necessary system tables for your job.

The  LOGIN  command  may  be  abbreviated  L.   It  takes  one  argument,  a
project-programmer name.  Different characters used between the two parts of
the name are used for different options:

  PRJ,PRG  types all system messages and processes OPTION.TXT (see below)
  PRJ/PRG  types  system   messages  new   since  last   login,  processes
           OPTION.TXT
  PRJ.PRG  types no messages, ignores OPTION.TXT; for fast login
  PRJ%PRG  sets new password, as explained below, then acts like PRJ,PRG

System messages are notices  for all users, sent  by the MAIL *  command and
stored in the  file NOTICE.TXT[2,2].  There  may also be  messages addressed
specifically to you.  The handling of your personal mail is explained below.

It  is possible  to set  a password  and file  protection codes  to restrict
access to a particular PPN.  If the PPN you specify to LOGIN has a password,
LOGIN types  Password= and  you must type  the correct  password to  log in.
Echoing of input  characters is turned off  so the password does  not print.
Passwords  may be  one to  six  letters or  digits followed  by  RETURN.  To
protect  files  from  unauthorized  access,  there  is  a   protection  code
associated with  each file.  The  code specifies the  access allowed  to the
file for its owner (i.e., a user logged in under the file's PPN),  for other
authorized AI  Lab users,  and for guest  users who  are logged  in remotely
(from the ARPA network, dial-up telephone lines, or campus  terminals).  You
can set the protection code for a file using the COPY program  (see Appendix
2).  However, you must use the  LOGIN program to set the protection  code of
your  file  directory  itself,  and the  default  protection  code  which is
assigned to new files created  in your directory if the program  writing the
file does not  specify a value  explicitly.  If you  use % as  the delimiter
between the project  and programmer names when  you log in, LOGIN  will give
you the opportunity to change your password, the file  directory protection,
and the default protection for new files.  The protection codes  are entered
as three-digit octal numbers, with the following meanings:

  Bit      Meaning in directory protection code

  400      password is for remote logins only (see below)
  200      unused
  100      owner may not write files
  040      local users may not change protection of files
  020      local users may not read directory or any files
  010      local users may not write any files
  004      guest users may not change protection of files
  002      guest users may not read directory or any files
  001      guest users may not write any files

  Bit      Meaning in file protection code

  400      don't dump this file (see DART, Appendix 5)
  200      delete protect (see COPY, Appendix 2)
  100      owner may not overwrite this file
  040      local users may not change protection of this file
  020      local users may not read this file
  010      local users may not overwrite this file
  004      guest users may not change protection of this file
  002      guest users may not read this file
  001      guest users may not overwrite this file

If  the 400  bit is  on in  the protection  code for  a file  directory, the
password associated  with that area  is used only  for logins from  a remote
site; no password will be required for local login on that PPN.   Except for
the special  NET,GUE guest account*,  remote login is  not allowed on  a PPN
which does  not have  a password; thus,  if you  want to be  able to  log in
remotely but do not want to have to type a password for local login, you can
set the 400 bit in your directory's protection code.

Users with access to local  terminals who sometimes need to log  in remotely
can set a  password (with %)  for their own PPNs;  remote users who  want to
establish accounts here should  communicate with Lester Earnest.   (Type the
command MAIL LES.)

Sometimes you may find the  system is in maintenance mode, which  means that
the monitor  is being debugged  and the system  is not available  for normal
use.   If you  try to  log in  at  such a  time you  will be  asked  for the
maintenance password.

The further  details of  LOGIN's operation  are controlled  by a  file named
OPTION.TXT which you  may have in  your directory.  If  there is one,  it is
searched for a line of the form

LOGIN:opt1,opt2,opt3;comments

where  opt1...optn are  the  desired options.   Spaces  may be  used  in the
obvious places.   Only the  first six letters  of an  option name  are read.
Upper or lower case is ok.  Several other programs use this OPTION.TXT file,
looking for their own option lines.

The LOGIN options are as follows:

  NOMAIL   Does not ask  any questions about  message files.  This  is for
           people  who like  to type  ahead while  LOGIN is  running.  The
           exact effect depends on what other options are used; see below.
  MESSAG   Types your mail without asking; see below.
  GRIPE    Types out new gripes just like new system messages.
  LOGRUN   Runs the LOGRUN program, which executes monitor commands from a
           LOGRUN entry in OPTION.TXT; see below for details.
  INIT     Runs the file INIT.DMP in your directory after  login.  Doesn't
           work if you also have LOGRUN.
  BEEP     If you are at a display, enables the system feature of
	   automatic beeping whenever your job finishes doing something
	   that took more than 15 seconds of real time.  Like ESC Z.
  WHO      If you are at a display, starts a WHO line.  Like ESC W.
  AUDIO=n  Selects audio switch input channel n to your speaker if you are
           at a  display terminal.   "n" is  an octal  number.  "AUDIO=-n"
           inhibits telephone paging interrupts, like BREAK n U.
  DM       If you are not on a III or DD display, tells the system that
	   you are on a Datamedia (DM) display.
  DM=n     Just like DM option except that this specifies that your DM has
	   n lines (useful mostly on DM-simulating displays that provide
	   some number of display lines other than 24).
  FDM      Just like DM option if you are on a high-speed dialup line.
	   Ignored otherwise.
  FDM=n    Just like DM=n option if you are on a high-speed dialup line.
	   Ignored otherwise.
  DM128    Like DM option but also tells the system that your DM can
	   display the control characters (octal 1 to 37) when they are
	   output preceded by an ascii escape character (octal 33).
  DM128=n  Like DM=n and DM128 options combined.
  FDM128   Just like DM128 if you are on a high-speed dialup line.
	   Ignored otherwise.
  FDM128=n Just like DM128=n if you are on a high-speed dialup line.
	   Ignored otherwise.
  BOLD     If you are on a DM display, tells the system to display your
	   line editor in boldface, assuming your DM has bold and blinking
	   interchanged like all SU-AI DMs.  This is the default for DMs.
  NOBOLD   If you are on a DM display, tells the system not to display
	   your line editor in boldface/blinking (especially useful if
	   your DM does not have bold and blinking interchanged).  This
	   option should occur after the DM or DM128 option, if present.
  PORNO    Try it and see.  Doesn't work if you also have LOGRUN or INIT.
  DIGEST   Tells you if there is  a new Associated Press news  digest that
           came in after the  last time you logged  in and asks you  if it
           should type it out.
  QMAINT   Only type  maintenance forecast  if it  has changed  since last
           login.   Otherwise  the maintenance  forecast  is  always typed
           unless . is used as the PPN delimiter.
  ME       Tells you your fortune.
  COOKIE   Alternate fortune cookie selection.  See which you prefer.
  HIDE     Makes your Data Disc channel private, like ESC H.
  UNHIDE   Makes your Data Disc channel public, like BREAK H.
  WIDTH=n  If you are  at a Teletype, sets  the maximum number  of columns
           for TTY output to the decimal value n, which should  be between
           16 and 256.  Like TTY WIDTH n.
  FULL     If you  are at  a Teletype,  sets the  full character  set mode
           switch.  Like TTY FULL.
  NOFULL   If you are  at a Teletype, clears  the full character  set mode
           switch.  Like TTY NO FULL.
  TABS     If you are at a Teletype, clears the tab expand bit;  tabs will
           not be converted to spaces on output.  Like TTY TABS.
  NOTABS   If you are at a Teletype, sets the tab expand bit; tabs will be
           converted to spaces on output.  Like TTY NO TABS.
  FILL     If you are at a Teletype, sets the fill switch to  insert extra
           carriage returns on output to give the carriage time to get all
           the way back.  Like TTY FILL.
  NOFILL   If  you  are  at  a  Teletype,  clears  the  fill  switch  thus
           suppressing  insertion  of extra  carriage  returns  on output.
           Like TTY NO FILL.
  ECHO     If you  are at a  Teletype, tells the  monitor to send  back to
           your terminal the characters you type.  Like TTY ECHO.
  NOECHO   If you are at a Teletype, tells the monitor not to send back to
           your terminal the characters you type.  Like TTY NO ECHO.
  ARROW    If  you  are at  a  Teletype,  tells the  monitor  to  type out
           characters below octal  40 as uparrow-letter (e.g.,  ↑A) rather
           than  the character  itself except  for BEL  (7), TAB  (11), LF
           (12), VT (13), FF (14), and CR (15).  Like TTY ARROW.
  NOARROW  If  you  are at  a  Teletype,  tells the  monitor  to  type out
           characters below octal 40  as themselves instead of  as uparrow
           characters.  Like TTY NO ARROW.

If there is a message addressed to you, LOGIN normally types

Message for YOU last written by PRG using PROGRM on dd-mon-yy at hhmm
Read it now?

where YOU is your  programmer name, PRG is  the programmer name of  the last
user to  write anything  in your  message file,  PROGRM is  the name  of the
program used to do it, and dd-mon-yy  and hhmm are the date and time  it was
done.

If you type Y, the message file is printed, and you are allowed to delete it
(the whole file).  If you type N, the message file is not printed.   You can
also type R,  which will treat  your mail file  like a system  message file;
i.e.,  header lines  will not  be typed,  and, if  you used  a slash  in the
command, the  only messages typed  will be those  which came since  you last
logged in.  However, R may not find the recently received messages correctly
if your mail file is in E format.  If you type R, LOGIN does not ask  if you
want to delete the file.

If you have the MESSAG option but not the NOMAIL option, then  personal mail
is  always typed  out without  asking first.   If you  have both  MESSAG and
NOMAIL, the mail is typed but you are not given the chance to delete it.  If
you have NOMAIL alone, you get the Message for YOU...  line but not the mail
itself; many people use the  NOMAIL option for LOGIN and run  other programs
to read their mail.   See the file E.ALS[UP,DOC] on  the use of E as  a good
way to process your mail; remote users may prefer to use RCV--see page 105.

If you have DIGEST and NOMAIL, you are notified of a new A.P.  digest but it
is not typed out.  (RCV will also do this for you.)  It is also  possible to
get automatic  notification of  incoming news  stories on  particular topics
from the  NS program;  these messages  are treated  like personal  mail with
respect to MESSAG and NOMAIL.

The LOGRUN program  looks for a line  in your OPTION.TXT file  starting with
LOGRUN:.  It then takes that line, and all following lines until a semicolon
is seen, and makes them be executed as if you typed them in.  (The semicolon
is required.)


------
* At the present time the NET,GUE account has been discontinued,  because it
was  using too  much computer  time.  People  who are  not  authorized users
cannot log in remotely.  A  few monitor commands are allowed  without login,
as  mentioned  in the  individual  command descriptions.  The  special guest
account  capability  still  exists, however,  as  does  the  file protection
mechanism.  File transfers over the ARPA network initiated  remotely without
providing a password  are treated as guest  account use for  file protection
purposes.
                                5.2  LOGOUT


The command for  terminating a session on  the computer is KJOB  (kill job),
which runs the LOGOUT program.  The command may be abbreviated K.   It takes
an  optional  switch  argument to  select  various  optional  features.  The
OPTION.TXT file is also used to control logout options.

The  LOGOUT  program  normally   types  out  several  lines   of  accounting
information, e.g., computer time used.  If you are not logged  in elsewhere,
it deletes  any files in  your directory with  extension RPG (these  are the
files the  SNAIL program  uses to remember  the commands  you gave),  and if
there are no files in your directory, it deletes the directory itself.

If you have the RPGSAV option (see below), LOGOUT will look for TMPCOR files
(simulated files in  core storage) used  by some processors  for remembering
SNAIL commands instead of disk files, and copy them to the disk so they will
be remembered the next time you log in.  Note that this will not be  done if
you use  the /F  switch (below) for  fast logout.   LOGOUT will  save TMPCOR
files created under an alias with the same programmer name as your logged-in
PPN.

You are told if you have another job logged in with the same PPN, and if you
have  assigned any  private devices  (mag tape,  etc.) you  are  reminded to
unload them.

This normal processing can be affected by switches in the command  itself or
by options in the OPTION.TXT file.  LOGOUT looks for a line in OPTION.TXT of
the form

LOGOUT:RPGSAV,ME,FAST;

(Of course,  you need not  use all the  options.)  These options,  if found,
have the following effect:

  RPGSAV   Don't delete .RPG files.
  ME       Type a friendly message (try it).
  FAST     Just log out, don't  delete anything, don't save  TMPCOR, don't
           print statistics.

Switches  are  single  letters  preceded by  a  slash  (e.g.,  KJOB/F).  The
switches are:

  /K       Kill .RPG files (only necessary if you have the RPGSAV option).
  /S       Save .RPG files.
  /M       Type a message, like the ME option.
  /F       Fast logout.
  /Z       Zero the  disk.  Deletes  all your files,  after asking  if you
           really mean it.

There  are two  functions of  LOGOUT which  are performed  when you  are not
logged in elsewhere, regardless of options or switches used: the  "date last
written"  entry for  your file  directory is  updated to  reflect  your most
recent logout (this information is used  by FINGER), and if you have  a file
named LOGOUT.MSG, it is typed and deleted.

There  are two  other monitor  commands which  run the  LOGOUT  program, for
logging in with another PPN, and  for attaching to an existing job  (see the
ATTACH command, Section 4.4.)  They are

KLOG logout-switches ppn
KATTACH jobnum ppn logout-switches

The logout switches are as described above.  The other arguments are  in the
required form for the LOGIN  and ATTACH commands.  Remote users may  not use
the KATTACH command; instead, use ATTACH and then KILL the old job.

Finally, there is a LOGOUT command, which is exactly the same as KJOB but no
arguments are allowed.

Any of these commands,  when typed at a PTY  which is not owned by  a TELNET
server (that is, not the  virtual terminal of an ARPA network  user), simply
kills the job  without running the  LOGOUT program.  This  has approximately
the effect of KJOB/F.
                                 5.3  SNAIL


The SNAIL  commands run  the SNAIL  program, which  then runs  various other
programs.  The commands are divided into three basic groups.  The first, for
text file editing, take a file specifier as argument:

  CREATE   create a file with SOS
  EDIT     edit a file with SOS
  MAKE     create a file with TECO
  TECO     edit a file with TECO

The other  major editor,  E, includes the  necessary code  to carry  out the
SNAIL  functions  itself,  e.g.,  default  extensions  and  remembering  the
commands.   The  following  commands  are,  therefore,  not  strictly  SNAIL
commands but function equivalently:

  CETV     create a file with E
  ETV      edit a file with E
  READ     edit with E in book mode

The second group, for program compilation, take one or more program names or
a command string, along with various option switches:

  COMPILE  compile programs
  LOAD     compile and load programs
  EXECUTE  compile, load, and run programs
  PREPARE  compile and load with a debugger
  DEBUG    compile, load with a debugger, and start the debugger
  TRY      compile, load with a debugger, and start the program

  PUB      produce a document with the PUB document compiler
  POX      produce a document with the POX document compiler

  RER      run a system program and give it a command string
  RERUN    run a user program and give it a command string
  PROCESS  pass a command string to the monitor

Finally,  one  more  command,  used  in  conjunction  with  the compile-type
commands, which takes no arguments:

  CREF     produce cross-reference listings from compilations

The complete description of these commands, with the command syntax  and the
processing options provided, is included as Appendix 1.
                            5.4  COPY and SPOOL


The next major group of commands runs the COPY program.  Their arguments are
generally in the form "new-file ← old-file":

  COPY     copy a file
  TRANSFER copy and delete the original
  RENAME   rename a file or change protection

The following COPY commands imply  a destination, and take just one  or more
input file specifications (separated by commas if more than one):

  DELETE   delete a file
  TYPE     copy to the terminal
  LIST     copy to the line printer (SPOOL, below, is preferred)
  PRINT    copy to the line printer, different format options
  XGPLIST  copy to the Xerox Graphics Printer (XSPOOL is preferred)
  DIRECTORYtype file directory

The COPY manual  explains these commands  fully, along with  various options
specified in the argument list; see Appendix 2.

Since only one  job can use the  line printer or XGP  at a time,  if several
people want  to make  listings at once  there is  a scheduling  problem.  To
solve this,  the system allows  listing requests to  be stored on  disk, and
processed one at a time by spoolers which actually control the LPT  and XGP.
The system commands for this function are:

  SPOOL    request line printer listing of specified file(s)
  XSPOOL   request XGP listing of specified file(s)
  UNSPOOL  delete a spooler request
  QSPOOL   type out spooler status and queues

The  SPOOL  commands also  allow  editing  options to  be  specified  in the
argument list; see Appendix 3 for details.

The commands in this section all  require that you be logged in,  except for
TYPE, DIRECTORY, and QSPOOL.
                                 5.5  MAIL


Several commands are provided for sending messages to other users.  Messages
can be filed on disk, so  that the addressee will be notified about  them by
LOGIN, or they  can be sent  directly to the  terminal of a  logged-in user.
There is also an automatic reminder system which allows messages to  be sent
or programs to be run at a later time.  The commands used for these purposes
are:

  MAIL     send a message to one or more message files
  SEND     send a message to the terminals of one or more users
  GRIPE    send a message complaining about a system problem
  REMIND   schedule a message to be sent at some later time
  PLAN     create a file describing how to find you when not logged in
  EVENT    send a message to all users about an event on a given date
  BATCH    schedule the execution of a command string at some later time
  LATER    schedule the execution of a given program at some later time
  RETRY    send any messages which were queued by earlier failing operations
  ETV ∂    edit E-format message file
  RCV      edit non-E-format message file
  CANCEL   delete REMIND, BATCH, or LATER requests or queued mail

The usual format of the MAIL and SEND commands is

MAIL user message
SEND user message

where user is a  programmer name and message  is the one-line text  you want
sent.  If you do not include a message in the command, the MAIL program will
ask you  to type a  message, which may  then have more  than one  line.  The
complete description of these commands is in Appendix 4.

The commands in this section require that you be logged in, except for MAIL,
SEND, GRIPE, and RCV.
                                 5.6  DART


DART is a program  to save disk files on  magnetic tape and restore  them as
needed.  It also  handles mag tape  positioning commands.  The  file dumping
commands take disk file names as arguments:

  DUMP     dump disk files onto tape
  RESTORE  restore files from tape to disk
  LOCATE   find which tape has dumped copy of files
  TLIST    list all files on a tape

The tape positioning commands are:

  REWIND
  ADVANCE
  BACKSPACE
  EOT

The  complete documentation  of  these commands  is  in Appendix  5  of this
manual.
                                  5.7  DO


The  DO  program allows  automatic  execution of  an  arbitrary  sequence of
commands.  By writing DO command  files, you can make your own  sequences of
program execution analogous to the SNAIL compiler-loader-execution sequence.
The  DO  command  takes  a file  specifier  as  argument,  with  the default
extension being .DO.  The text  in the file is simply transferred  into your
terminal's input buffer, as if you had typed it.  Then the DO program exits,
and the  monitor processes  the commands that  came from  the file.   The DO
program cannot be run by detached  jobs.  The amount of text allowed  in the
DO  file is  limited by  the  capacity of  your input  buffer  (currently 95
characters,  plus  one  extra  line  of  up  to  160  characters  on display
terminals).  You can sometimes  circumvent this limitation by  the following
trick:  if the  command string  to be  processed by  DO ever  leaves  you at
monitor command  level, you  can insert  at that  point in  the string  a DO
command to process another file  (or another function in the  same file--see
"|" character below); the  DO command must appear  as the last thing  in the
string--subsequent commands should  then appear in  the next DO  file.  This
trick can be repeated any  number of times--simply make the last  command in
each DO file be a DO command to reference the next file.

DO does some conversion of  certain characters in the file, to  allow things
like  CONTROL  and  META characters.   The  characters  which  are processed
specially are:

  RETURN   ignored
  LINE     ignored
  ↔        translated to RETURN followed by LINE
  ↓        translated to LINE
  ≠        translated to ALT
  λ        translated to deferred CALL (one ↑C)
  VT       adds CONTROL bit to the following character
  α        adds CONTROL bit to the following character
  FORM     adds META bit to the following character
  β        adds META bit to the following character
  ⊗        translated to ESC
  ⊗-       translated to BREAK
  |        separates different DO functions (see below)
  ≡        quote the next character (do not process it specially)
  ?        takes  the next  character  (other than  RETURN or  LINE)  as a
           variable name.  Suppose the character is A (i.e., ?A).  If this
           is  the  first occurrence  of  ?A  in the  file,  DO  types out
           "A=     " and  waits for you  to type in  a text  string ending
           with RETURN.  This  string is substituted for  every occurrence
           of ?A in the file.

To allow more than  one DO function to be  stored in the same  file (because
small  files are  inefficient in  using disk  space), the  vertical  bar (|)
character can be used as a separator.  The command

DO DOFILE(3)

will DO the commands between the second and third | characters in the file.

The DO command  remembers its argument  in a .RPG file,  so you can  type DO
without an argument to repeat  the same command file.  Also, the  DO command
is remembered as if it were a COMPILE-type SNAIL command, so the  SNAIL exit
mode commands in  the text editors will  also repeat the DO  command.  Thus,
users of languages like LISP which are not recognized by SNAIL can  write DO
files to run LISP and read in their program.

The  DO program  ignores  E directory  pages  and FORM  characters  found in
E-format files.
                                 5.8  ZERO


The ZERO command is used to initialize file directories on disk  or DECtape.
The command takes a device name  as argument; the device must be  DSK, DTAn,
or UDP (user disk pack).

For DECtape, ZERO simply executes the UTPCLR UUO, which tells the monitor to
initialize the file directory for the DECtape unit you specified.  Make sure
you don't get the wrong unit number and zero someone else's DECtape!

If you specify device DSK, you  must confirm (by typing Y) that you  want to
delete all the files in your  disk area.  ZERO then attempts to  delete each
file in your  area.  For each  file, it types  # if successful,  otherwise a
message indicating the reason for the failure (write protected, etc.).

The ZERO program is not used for new format (file structured) UDPs.   It can
be used to  change the password  of an old format  UDP, and also  allows the
initialization on such a UDP of the file structure formerly used by the COPY
program, although  this feature  is now obsolete.   The UDPUFD  command (see
page 46) is used to set passwords and create file directories on  new format
UDPs.
                                  5.9  WHO


The WHO command (abbreviated W) runs the WHO program, which  displays system
status information at your terminal.  If you are at a display  terminal, the
information is  automatically updated  as long as  the program  continues to
run.  If you are at a Teletype, the information is only typed once.  The WHO
command  does  not require  that  you  be logged  in.   WHO  accepts various
commands, described later, to control what information is presented.

The first part of the WHO display is a list of the jobs on the  system, with
various information about each job.  This list is divided into two sections,
for jobs belonging to users  and for system phantom jobs.   (More precisely,
the second section  contains jobs which are  detached and have the  JLOG bit
off in  the job status  word, i.e.,  are not logged  in.)  Jobs  attached to
pseudo-teletypes are listed under the controlling job, with the line for the
controlled job indented.  The listing for each job has several parts:

  JOB      job number
  QUEUE    queue  name,  as  in  the  WHO  line,  with  possibly  an extra
           character indicating  one of several  states (if more  than one
           applies, the one which comes first in this list is displayed):
           ←  the job needs to be swapped in, e.g., for a monitor command
           -  the job is now actually running
           ⊗  the job is locked in core
           →  the job's upper segment is next in line to swap in
           ↑  the job is next in line to be swapped out
           ↓  the job is next in line to be swapped in
           *  the job is swapped out
           ↔  the job is next in line to be moved in core
  PPN      the job's logged-in PPN ("100100" for not-logged-in WHOs, etc.)
  LINE     the job's terminal line number, or DET for detached jobs
  JOBNAM   the job name
  SIZE     the job's core image size in 512-word pages
  TIME     the job's total run time since login
  PL       percentage of CPU time spent on this job recently
  SL       service level reservation for this programmer
  SEG      job number of this job's upper segment
  SW10     number  of  ticks  between startups  of  job's  PDP-10 spacewar
           module
  SW6      number of ticks between startups of job's PDP-6 spacewar module
  ALIAS    the job's ALIAS PPN

If  a job  has an  alias  and is  not running  a spacewar  module  on either
processor, a dot  (.) will appear in  the area used for  indicating spacewar
modules, to help the viewer line up the alias with the proper job line.

After the job display comes a display for upper segments, containing the job
number (possibly followed by one of the above single-character markers), the
letter W if the segment is not write protected, the job name, core size, and
number of jobs using the segment.

The next part of the WHO display is a summary of overall  system statistics.
This includes the time since  the system was last restarted  (UPTIME); short
and long  term time spent  running the null  job (NULTIMES); short  and long
term time spent running the null  job when another job wanted to be  run but
wasn't in core (WASTED); total user core image sizes in core and swapped out
(CORE); the largest contiguous free block of core, the total  available user
core not used by locked-in jobs, and the total available user core (USABLE);
the  number of  jobs  in RUNQ  and TQ  and  their combined  core  image size
(RUNNING JOBS); and the total service level reservation for  logged-in users
(TOTAL SLEVEL).

The final section of the WHO display is a list of all I/O devices in  use by
programs or assigned by jobs.  For  each such use of a device  (most devices
can only have  one at a  time), a line  is displayed containing  the logical
name,  if  any; the  physical  name; the  character  "#" if  the  device was
assigned  by the  ASSIGN command;  the  job number  using the  device;  if a
particular file is  open, the file name,  extension, and directory  ppn (for
disk files), the number of  records in the file, the record  currently being
read or written, and the read/write status.  This last will be W if the file
is open for output, R for input, or RA for read/alter mode, followed by E if
the end of file has been read.  Note: if the file has been closed, there may
be  no  mode  flag, and  a  large  number like  1101  in  the current-record
position.  Record numbers are displayed in octal.
                                WHO commands


WHO  accepts commands  to  determine what  information is  to  be presented.
These are single-character commands, and should not be followed  by carriage
return.  However,  some of  the commands  must be  followed by  an argument,
which is ended with carriage  return; ending such an argument with  alt mode
will abort the command.  WHO commands may be included on the monitor command
line which starts the WHO program running, or can be typed  separately while
the program is running (the latter on display terminals only).  Only one WHO
command which takes an argument can be included on the monitor command line,
and it must be the last thing on the line.

On display terminals, only part of the information can fit on the  screen at
a given  time.  Certain commands  provide "scrolling" of  the display  up or
down; these commands are ignored on non-displays.

The available commands are listed in the table below.  Other characters will
be ignored in a monitor command line, but will make WHO clear the screen and
exit if typed while WHO is running on a display.  If no command is  typed to
a WHO  running on a  display for two  minutes, WHO will  exit, unless  the ∞
command has  been given.  After  WHO exits, typing  CONTINUE to  the monitor
will  tell WHO  to  continue presenting  the  same information  it  had been
presenting when it exited.

The following commands apply only to Stanford display terminals:

  ↑ (or ;) scroll up 1/2 screen
  ↓ (or :) scroll down 1/2 screen
  FF       (formfeed) scroll up whole screen
  VT       (vertical tab) scroll down whole screen
  0-9      repeat argument for ↑ ; ↓ : FF VT
  ∞        run forever (otherwise WHO  exits after nothing has  been typed
           in for two minutes)
  E        Exit, leaving information displayed on the screen and  with the
           page printer set up to avoid erasing it

The following commands apply both to displays and to hardcopy terminals:

  R        only  display jobs  which have  recently been  Running  (not in
           NULQ, STOP, IOWQ, or INTW)
  N        restore Normal display (all jobs)
  T        Type out  the job  information only  (not system  statistics or
           file  information).   On  a  display,  exit  after  typing  the
           information once.
  F        Like T, but type File information also.
  M V * " + - @   These  seven commands  allow you  to specify  which jobs
           should be displayed.  These are explained below.

WHO keeps two special tables  of job specifications for deciding  which jobs
it will display; these tables are called the PLUS table and the MINUS table.
Jobs specified by the MINUS table will not be displayed (regardless of other
conditions).  The PLUS  table is ignored if  empty; but if it  is non-empty,
then only  jobs specified  by the  PLUS table  are displayed;  however, jobs
specified by both  tables will NOT be  displayed, since the MINUS  table has
priority.  Both tables are initially  empty, and the R and N  commands reset
both tables  to empty.   Jobs can be  specified in  these tables  by project
name, programmer  name, project-programmer name,  job number, and  job name.
Each of the commands * + - " @ takes an argument which should be  ended with
a carriage return; if an argument is ended with an altmode, the command will
be  aborted.  WHO  will beep  you if  an argument  is not  accepted (illegal
argument or aborted with altmode).   The commands M and V take  no argument.
The argument to @ is  a filename, the argument to  " is a job name,  and the
argument to each of the commands  * + - is a job specification which  can be
any of the following forms:

  PRG      programmer name (letters and digits only)
  ,PRG     programmer name (letters and digits only)
  PRJ,     project name (letters and digits only)
  PRJ,PRG  project-programmer name (letters & digits only)
  NUMBER   a decimal job number less than 64 (digits only)
  "NAME    a job name (any sixbit characters after ")

A  job will  match specifications  of  the first  four types  if  either its
logged-in PPN or its ALIAS  PPN matches the specification.  Any  job running
on a PTY owned by a  job being displayed will also be displayed,  unless the
job on the PTY matches a specification in the MINUS table.  If a job running
on a PTY is displayed and its controlling job is not displayed, then the job
on the PTY will be indented using dots (.) instead of spaces (which would be
used if the controlling job were being displayed).

The seven individual commands are described below.

  M        only display  jobs matching your  logged-in programmer  name or
           your ALIAS  programmer name (clears  both tables and  then puts
           your logged-in programmer  name and your ALIAS  programmer name
           into PLUS table)
  V        only display jobs belonging to volleyball players (simulates an
           @VB.DIS[P,DOC]--see @ below)
  *<spec>  only  display jobs  matching the  specification  <spec> (clears
           both tables and then puts <spec> into PLUS table)
  +<spec>  also display jobs matching <spec> except those matching entries
           in MINUS table  (adds <spec> to  PLUS table and  removes <spec>
           from MINUS table); leave running-jobs-only mode.
  -<spec>  don't display jobs matching <spec> (adds <spec> to  MINUS table
           and removes it from PLUS table)
  "<name>  only display jobs with the job name <name> (clears  both tables
           and then puts <name> into PLUS table)
  @<file>  clear PLUS  and MINUS  tables and  then put  job specifications
           from the file  <file> into the  tables.  E directory  pages and
           SOS  line  numbers  are  permitted  and  ignored.   The default
           extension .DIS is used if no extension is typed.  If no  PPN is
           typed, the disk area [P,DOC] is tried first, then your own disk
           area, to find the file.

While reading from  a file, spaces  are ignored (except  in a job  name).  A
semicolon not  in a  job name  causes the rest  of the  line to  be ignored.
Non-SIXBIT  characters (except  lower-case letters,  which are  converted to
upper case) are treated like CRLFs.

An entry in  the file can be  any of the forms  listed below, and  should be
terminated by a comma  or a CRLF.  Note however  that a comma (or  any other
sixbit  character including  semicolon and  space) appearing  as one  of the
first 6 characters of a job name will be taken as part of the job name.

  +<specx> Add the specification <specx> to PLUS table.
  <specx>  Add the specification <specx> to PLUS tabls.
  -<specx> Add the specification <specx> to MINUS table.

Unless  all  entries  in the  file  are  of the  form  -<specx>,  WHO leaves
running-jobs-only (R) mode.  A job specification in a file, <specx>,  can be
any of the following forms (note that these are slightly different  from the
forms for <spec> that you can type in):

  PRG      programmer name
  [PRG]    programmer name
  [,PRG]   programmer name
  [PRJ,]   project name
  [PRJ,PRG]project-programmer name
  "NAME    job  name.  After  the "  the first  6 characters  (or  less if
           terminated by a CRLF) are taken as a job name.  Then characters
           are skipped until a comma or CRLF is seen.

Note that you cannot specify a job number from a file.

From a non-display terminal only,  the command WHO/Q will type only  the PPN
and TTY for each job which  is not detached.  ARPA network users  are listed
separately.  This is intended for Quick typeout.

If  WHO is  started with  the REENTER  command, it  makes a  listing  of its
information display on  the line printer.   The information printed  will be
controlled by the WHO commands in effect when WHO last exited, if any.
                                 5.10  FIND


The FIND command is used to locate information in a file by searching  for a
keyword and typing out the "paragraph" in the file containing the  key.  The
main  use of  this program  is to  look people  up in  the AI  Lab telephone
directory.  FIND may be run without logging in first.

FIND [EXACTLY] [WITHIN <delim>] [EXACTLY] <key> [[IN] <file>]

where square brackets [] indicate optional elements, <key> is the  string of
characters to be found  in the file <file>,  and <delim> is either  a single
character or one of the following words: MSG LINE PAGE PARAGRAPH GRAF.

If <key> contains any spaces or tabs, it must be separated from the filename
<file> (if present) with the word  IN, or delimited by double quotes  (") or
left and right single quotes (` and ').  The left and right quote characters
(` and ') may  appear in the  key when double  quotes surround the  key, and
double quote and  left single quote characters  (" and `) may appear  in the
key when left and  right single quotes surround  the key.  If the  number of
spaces and tabs in the key is significant (in EXACTLY mode), the quoted form
must be used; note however that quotes do not imply EXACTLY.

The  EXACTLY qualification  (which, as  indicated by  the syntax  above, may
occur either before or after any WITHIN phrase) causes FIND to search for an
exact match.  Otherwise  FIND performs a  template match.  A  template match
recognizes two special  symbols in the key:  space (one or  more consecutive
spaces or tabs in the key) and ellipsis (three or more consecutive dots).  A
space in the key  matches zero or more spaces,  tabs, and CRLFs in  the unit
being  searched.  An  ellipsis in  the key  matches zero  or  more arbitrary
characters in the  unit being searched.   Furthermore, in a  template match,
upper and lower  case letters are equated.   The EXACTLY search  is somewhat
quicker and requires  that the unit searched  (see the WITHIN  phrase below)
contain the key exactly as given.

The  WITHIN <delim>  phrase  allows  specification  of  the  delimiter  that
determines the amount of text searched as a unit and typed out when a key is
found.  The default typeout is a PARAGRAPH except when the partial-sign mail
filename specifier is  used, in which case  MSG is the default.   To specify
some other quantity,  use the WITHIN phrase  in the command (see  the syntax
above).   The  text typed  out  will be  that  delimited by  <delim>  at the
beginning  and at  the end.   The delimiter  <delim> can  be specified  as a
single character or it can be specified by one of the following exact names:

        MSG  LINE  PAGE  PARAGRAPH  GRAF

where MSG  means that partial  sign (∂) is  the delimiter (designed  for use
with mail files), LINE means that the end of a line is the  delimiter (i.e.,
only the  line on which  the key is  found will be  typed), PAGE  means that
formfeed (a pagemark) is the  delimiter, and PARAGRAPH or GRAF means  that a
blank line is the delimiter.

The delimiter character will be treated as a delimiter only if it  occurs as
the first character on a line; a line starting with the  delimiter character
is considered the first  line in a new text  unit, and the previous  line is
the last line in the previous text unit.

Each separate text unit containing the  key is a hit and is typed  out, with
each line of text preceded by an asterisk (*) except that the line  in which
the key occurs is preceded by  a greater-than sign (>).  Also, the  hits are
counted and the count is printed after the whole file has been searched.

Within a single  delimited text unit,  up to about  25 lines can  occur both
before and after the line in which the key is found.  If more than  about 25
lines occur before and/or after the key but within the delimited  text area,
an ellipsis (. . .) will be typed out before the first line typed out and/or
after the last line typed out.

The default file to be  searched is the A.I. Lab phone  directory.  However,
if you have an OPTION.TXT file in your alias directory with a line beginning
FIND:, then the  default file searched will  be that named after  the FIND:.
The default file is used unless  you specify a filename in your  command, in
which case the specified file is searched.  If you have a  FIND:<file> entry
in your  OPTION.TXT file, you  can still have  the phone  directory searched
without typing its exact name by using the filename PHONE in your command.

The FIND program tries to be as clever as possible about deciding what is or
is not a filename.  For example, the command

FIND LARRY TESLER

will look for the string "LARRY" in the file TESLER if you have such  a file
in your directory, but will  look for "LARRY TESLER" in the default  file if
you do not have  a file TESLER.  However, this  rule is applied only  if the
key  ("LARRY")  is only  one  word; otherwise,  the  key must  be  quoted or
delimited with IN if a file is also specified.

The filename  given can  use the  partial sign  (∂) to  specify a  mail file
(prg.MSG[2,2]).   The  partial  sign  can  optionally  be  followed  by  any
combination of  a programmer  name to specify  one other  than your  own; an
asterisk  (*)  to  specify  the  system  message  mail  file  NOTICE.TXT; an
extension to specify  one other than  .MSG; and a  PPN to specify  one other
than [2,2].  When a partial-sign filename specification is used, the default
amount of text to be searched and typed out as a unit (see the WITHIN phrase
above) is one message, that is, all text between line-starting partial signs
in  the  searched file;  this  can be  overridden  using  the WITHIN <delim>
phrase.

For instance, the command

FIND garply baz in ∂

will search  your own mail  file for  "garply baz" and  type out  the entire
message(s) it occurs in.  The command

FIND EXACTLY "  ME" in ∂*

(that's "<tab>ME") will find  all system messages (in  NOTICE.TXT[2,2]) from
ME.  The command

FIND EXACTLY "  ME" in ∂bh

(again that's "<tab>ME") will  find all messages sent  to BH by ME,  and the
command

FIND president in ∂.nap

will  search  your own  News  Service  notification file  on  [2,2]  for all
notifications containing "president".

More example commands:

FIND EXACTLY JMC
FIND MCCARTHY
FIND TARGET IN COMLIN.FAI
FIND TARGET COMLIN.FAI
FIND "TEMPLATE ... TARGET" COMLIN.FAI
FIND TARGET BYTE IN COMLIN.FAI
FIND `LOMA VERDE'
FIND EVENT IN ∂*
FIND EXACTLY " E " IN ∂*
FIND WITHIN GRAF EXACTLY Help IN ∂
FIND WITHIN ∂ HAND-EYE IN SAVED.MSG
FIND WITHIN MSG PDP-11 IN OUTGO.MSG
FIND WITHIN PAGE UDPUFD IN MONCOM.BH[S,DOC
FIND EXACTLY WITHIN LINE Foo IN FILE1
FIND john...lathrop

Example output for the last example command above:

*McCarthy, John (Prof. John)        207  74430 45    P[FR*/VB,JMC] 2 1600
>       846 Lathrop Dr., Stanford,94305, (9) 321-7580        β Sep 4

1 HIT ON KEY = john...lathrop
                  5.11  Other System Information Programs


This section describes other  commands which run information  programs.  All
of them are allowed to be run without logging in.

The WHERE command types out information similar to WHO for jobs belonging to
a particular user.  It takes a  PPN or programmer name as argument,  and for
each job whose  login or alias  PPN matches the  argument types out  the job
number, PPN, job  name, core size, queue,  total run time, actual  time when
the job was last run, terminal,  and alias if any.  (The terminal  is listed
by type and unit number,  e.g., TTY5, III23, DD56, PTY121.  Note  that these
are not actual  physical device names recognized  by the system,  except for
TTYn.)

If you are  logged in and  run WHERE, you can  give the REENTER  command and
type in a job name.  WHERE will then list all jobs with that job name.

The FINGER command also lists jobs belonging to a particular programmer, but
provides different information: the job number and job name,  the programmer
name, the real name of that programmer if known to the system, the number of
minutes since the  job was last  run, the terminal  number (and type,  as in
WHERE), and the actual location of the terminal (room number, if in the lab,
and whose office it is).   FINGER with no arguments displays all  jobs which
are logged in.  If the programmer specified as the argument to FINGER is not
logged in, the program types the date and time of his last logout.  Also, if
he has created a plan file (with the PLAN command, Appendix 4) it  is typed.
FINGER  will accept  human  being names  as argument  instead  of programmer
names, if desired.

The HELP command provides information about system programs  and facilities.
It takes as its argument the  name of some program or concept,  and provides
some short description of that facility, if such a description  exists.  The
data for HELP comes from  the [3,2] directory; this data consists  mostly of
short text files which are typed  by HELP, but may also include  programs or
monitor commands which HELP will run for you.  If no HELP is  available, but
there is a  longer document available in  one of the  standard documentation
file  directories,  HELP will  so  inform you.   If  you type  HELP  with no
argument,  the program  will list  the topics  on which  HELP  is available.
(Some of the HELPers which run programs rather than just typing text  at you
require that you be logged in.  HELP LOGIN is cleverly not among those.)

The SYSTAT command runs the  WHO program (see Section 5.9).  The  old SYSTAT
program is  no longer  supported on this  system, but  the command  name was
retained for compatibility with other systems.
                    5.12  Miscellaneous System Programs


The commands in this  section run miscellaneous system programs.   Except as
noted below, they require that you be logged in.

RSL runs  the RSL  program, which is  used to  reserve service  level (i.e.,
better service).  The  command takes no  arguments.  The meaning  of service
level and the use of RSL are described in Appendix 6.

The LISP command runs the  LISP interpreter.  It takes no  arguments.  Note:
when the system wizards need a command table slot to patch in a new command,
LISP is the first  to go.  Therefore, it  may not always exist.   R LISP has
the same effect and always works.

The  FIXIMLAC command  is used  to initialize  IMLAC terminals.   (These are
terminals which are  treated as Teletypes by  the monitor, but  are actually
small computers with display screens.)  With any luck, you will never see an
IMLAC.  Just in case, the command is explained in Appendix 7.   This command
may be given when not logged in.

The XEROX  command runs  the XEROX  program, which  does file  formatting to
produce pretty  documents.  It  has nothing  to do  with the  Xerox Graphics
Printer.   XEROX  has  been  largely  replaced  by  PUB,  a  more  versatile
formatter.  The XEROX manual is the file XEROX.LES[UP,DOC].

The TELNET and TN commands (TN is used to abbreviate TELNET) run  the TELNET
program, for talking to another computer on the ARPA network.  The host name
of the computer you want to use is the argument.

The  FTP command  takes an  ARPA host  name like  TELNET, but  runs  the FTP
program to carry  out the File Transfer  Protocol for copying  files between
computers.

Further details on TELNET, FTP, and the ARPA net in general is  contained in
Appendix 8 of this manual.

It is possible to  establish TELNET-like connections to remote  computers by
using  dial-up connections  via the  dataphones normally  used  for incoming
dial-up  lines.  Such  dataphones are  presently associated  with  TTY10 and
TTY11; the dataphone  on TTY11 includes  an automatic dialing  circuit.  The
DIAL command will establish an outgoing dataphone connection  and thereafter
behave like  a TELNET.  The  dial command takes  as its argument  either the
device  name of  a TTY,  in which  case you  must dial  the number  you want
manually on the associated dataphone, or a telephone number in the form

{(ddd)}ddd{-}dddd

where d represents a digit  and braces enclose optional characters.   In the
latter  case,  the  telephone  number  is  dialed  automatically  on TTY11's
dataphone.

The NS command  runs the News Service  program, which allows access  to news
stories which  have been  received from  the Associated  Press and  New York
Times news wires.  The HOT command  runs the HOT program, which types  AP or
NYT stories as they come  in.  These commands are restricted to  local users
at the  request of  the Associated  Press.  Full  documentation on  the news
service is contained in the file NS.ME[S,DOC].

The  UDPUFD command  runs the  UDPUFD program,  which is  used to  create or
delete  user  file  directories on  file-structured  user  disk  packs.  The
command format  is UDPUFD PRJ,PRG.   If you have  exactly one  UDP assigned,
that UDP is used.   If you have none assigned  but there is one  public UDP,
that UDP is  used.  If you have  two or more more  UDPs assigned, or  if you
have none assigned and there are  two or more public UDPs, the  program asks
which to use.  If there are no UDPs available to you, the program  tells you
to assign one.  To create a new directory, you must know the  pack password;
to change or delete a directory you must know its password.  You  can change
the directory's password or file protection codes with UDPUFD as you can for
the main file disk with LOGIN (see Section 5.1).  You can delete a directory
only if  it is  empty.  This  is a  privileged program,  and the  command is
restricted to local users (as is the UDP itself).  This command can  also be
used to  format the scratch/swapping  UDP for  OLD mode use  if it  has been
formatted for new mode: assign the UDP in OLD mode, mount the  scratch pack,
and type UDPUFD with no argument.  Only the scratch pack may  be reformatted
in this way.

The DRD  command (not  related to the  Department of  Redundancy Department)
runs the DIRED program, for displaying and manipulating file  directories at
a   Stanford  display   terminal.   See   the  file   DIRED.SGK[UP,DOC]  for
instructions.

The TEST command  runs the system  program TEST, if  any, which is  used for
testing new system features and programs.
                       SECTION 6--PRIVILEGED COMMANDS


Certain command functions can only be used by privileged users.   (There are
several privileges  which may  be associated with  a PPN.)   Most privileged
functions  are  carried  out  by  programs  and  are  documented  with those
programs, but  a few  monitor commands themselves  take on  special meanings
when used in a privileged way.  Most users do not require any privileges; if
you think you  need to be  assigned any, see  a system programmer,  who will
disagree.

The DETACH command, if given with a device name argument by a user  with the
DEV privilege,  makes the  specified device unavailable  to users.   This is
intended  to be  used  for hardware  maintenance.  The  ATTACH  command with
device name argument, also privileged, assigns a detached device to  the job
giving the command;  it becomes generally  available when the  job deassigns
it.  These commands also accept pseudo-device names of the form DDn, to make
Data Disc channel n unavailable.  (A detached Data Disc channel can still be
used  if  a program  requests  it specifically  by  number, or  if  no other
channels are available.)

A user  with the  ATT privilege  can use  the ATTACH  command to  attach any
detached job,  including specifically  a phantom job  (i.e., a  detached job
with the JLOG bit  off in its job status  word).  In this case,  ATTACH will
log the job in by turning on its JLOG bit.

The  FLUSH command  can be  given to  any terminal  by a  user with  the DEV
privilege.

The  KILL command  can  be used  to kill  any  job by  a user  with  the KIL
privilege.  Also, the job is  killed in a more immediate but  more dangerous
way,  without  waiting  for  it to  finish  any  input/output  operations in
progress.

The  TALK command  is always  successful if  given by  a user  with  the TLK
privilege.

Privileges can be enabled or disabled  at any time.  That is, for  each job,
the monitor remembers the privileges to which the job is entitled as well as
the  ones which  are  presently active.   All  privileges to  which  you are
entitled  are normally  activated when  you log  in, but  you may  choose to
disable any  or all for  safety reasons.  The  ENABLE and  DISABLE commands,
with no arguments, turn on or off all privileges to which you  are entitled.
These commands may also be used with a privilege name as argument, to enable
or disable  specific privileges.   If you  have the  PRI privilege,  you can
enable  specific  privileges to  which  you are  not  entitled,  except that
privileges which are intended only for specific programs (XGP font compiler,
service level monitor) cannot be enabled by any user.

Also,  a  few  system  programs intended  for  general  use  require special
privileges.  Such programs are run  by special commands (not R or  RUN), and
any attempt  to modify  your core image  while running  such a  program will
disable the temporary privileges involved.

The EDDT  command can be  given only from  the PDP-10 console  Teletype.  It
stops  timesharing  and  starts  Executive DDT  to  allow  debugging  of the
monitor.
                             APPENDIX 1--SNAIL


SNAIL is  a program  which interprets certain  monitor commands  for editing
files, compiling and loading  programs, and loading the line  editor buffer.
It simplifies these tasks when necessary by expanding concise  user commands
into  the different  forms  used by  editors, language  processors,  and the
loaders.  Without  user intervention,  SNAIL will  run the  correct language
processors to translate the user's files, and will run a loader to create an
executable core image containing the user's program.  SNAIL also  provides a
convenient means of communication between editors and other processors.

SNAIL knows about certain  standard processors.  These are the  editors: SOS
and TECO;  the compilers:  SAIL, FAIL,  F40 (FORTRAN),  MACRO, and  PAL; the
document compilers: PUB and POX; the debuggers: BAIL, RAID, and DDT; and the
loaders: LOADER and LINK.

The E editor includes within it the SNAIL functions, so its "SNAIL" commands
run  E directly  rather than  via the  SNAIL program.   Nevertheless,  the E
commands are included here because they are operationally similar.

The SNAIL commands are divided into three classes: EDIT, COMPILE, and CREF.
                         SNAIL: EDIT-Class Commands


There are six EDIT-class commands,  two for each of the three  commonly used
editors:

                                         Command Name
               Program            Create File    Edit File

               E                  CETV           ETV
               SOS                CREATE         EDIT
               TECO               MAKE           TECO

CREATE and MAKE

These commands take a file name as the argument.  SNAIL will call the editor
and tell it to initialize the file of that name.  For CREATE, SOS is started
in line  insertion mode.   TECO (the  MAKE command)  will be  initialized to
write on the specified file.

EDIT and TECO

These commands take a  file name (with optional project-programmer  name) as
the argument.  SNAIL remembers the name of the last file that was  edited in
a tmpcor file named ED.  (A tmpcor file is a simulated file kept in  core by
the monitor until the job is logged out.)  If an EDIT-class command is given
without an argument, SNAIL will use the argument that it remembered.

If no extension is specified in the argument and no file with the given name
and blank extension can be found, then the user's directory is  searched for
any file with  the given name and  one of several standard  extensions.  The
standard extensions are searched in the order:

  FAI SAI F4 PUB POX MAC LSP LAP PAL WRU NSA OSA LST CMD TXT

If none of these is found,  the first file listed in the directory  with the
correct name and any extension is edited.

If a user  specifies a disk  area other than  his own current  (alias) area,
then the edited file will be put  on his disk area and the source  (from the
other area) will not be changed.

The editors have a  read-only mode in which  files may be examined  by using
editor commands, but not changed.   To get read-only mode type /R  after the
file name in  the edit command (e.g.,  ETV M.SAI/R).  Read-only mode  in SOS
prohibits any  commands that would  change the file.   In the E  editor, the
mode may be changed from read-only to read-write at any time.

CETV and ETV

These are the create  and edit commands for the  E editor.  They do  not run
the SNAIL program; instead,  E itself simulates the SNAIL  functions.  There
are some differences between these and the other editor commands:

1.  The command can include /nP  and /nL switches for page and  line numbers
and the  /N switch for  no-directory mode  as well as  /R for  read-only.  E
saves its position in the file when it exits, so a later ETV command with no
argument will continue the edit from the same point in the file.

2.  If you specify  a PPN with the filename  given, E will let you  edit the
file on that disk area instead  of copying the file to your current  area as
the other editors do.

READ

The READ command starts E in a special mode, called book mode, used  to read
long  files over  an extended  time period.   In this  mode, E  does several
things differently from the normal editing procedure:

1.  If there is a file with the name in the READ command, the extension BKP,
and a PPN matching either that given in the command, your ALIAS PPN, or your
login PPN (tried  in that order),  it is used as  a SNAIL file  to determine
where to  start editing  the specified  file.  This  "bookmark" file  is not
deleted by  LOGOUT, so  you can continue  reading at  a later  session.  The
file, if found, is updated when you  exit from E; if there was no  BKP file,
one is created  on your (alias)  area when you  exit.  However, if  you exit
from E while on the last page  of the file, the BKP file will be  deleted (E
assumes you have finished reading the book in this case).

2.  A READ command with no  argument uses tmpcor files like the  ETV command
does, but the  tmpcor filename used is  different, so you can  alternate ETV
and READ commands for different files with no confusion.

3.  E does not allow you to modify the file when using book mode.
                       SNAIL: COMPILE-Class Commands


There  are three  types  of COMPILE-class  commands:  COMPILE-type commands,
which  abbreviate a  series  of commands  to compilers  (and  other language
processors) and loaders;  DOCUMENT-type commands, which process  a document;
and LOADBUF-type commands, which load the line editor buffer with a sequence
of  commands  much   like  the  DO   processor  (see  Section   5.7).   Each
COMPILE-class command, if given  with arguments, remembers both  the command
and the arguments in a tmpcor file named CM.  This is useful because all the
editors  allow an  exit-and-go command  (in SOS,  the G  command; in  E, the
CONTROL-X GO  command; in  TECO, the EG  command).  The  exit-and-go feature
runs SNAIL in a special way which makes SNAIL re-execute the command that it
remembered.
                SNAIL: DOCUMENT-Type COMPILE-Class Commands


The DOCUMENT-type COMPILE-class commands are the easiest to describe.  These
commands,  PUB and  POX,  run the  document  processors PUB  and  POX.  Both
commands take  a file name  as an argument,  with optional switches.   If an
extension is  specified with the  file name, that  file is processed  by the
appropriate  document processor.   If, on  the other  hand, no  extension is
specified with the file name, the user's directory is searched first for the
file  with the  given name  and  extension .PUB  or .POX,  depending  on the
command, then for the file with the given name and no  extension.  Whichever
of those  files is found  first is the  one which will  be processed  by the
document processor.

Switches  to  the  document  processor  may  be  specified   in  parentheses
immediately following the file name.

Examples of use:

        POX FOO.POX
        PUB FOO.PUB(LH)
        PUB XXX

The last of these will run  PUB on the file XXX.PUB if it  exists, otherwise
it will run PUB on XXX.
                 SNAIL: LOADBUF-Type COMPILE-Class Commands


The second  type of  COMPILE-class commands  are the  LOADBUF-type commands.
There  are three  such commands:  RER, RERUN,  and PROCESS.   These commands
incorporate some of the features  of the DO processor, allowing the  user to
take advantage of  the exit-and-go feature of  the editors for  an arbitrary
sequence  of  commands  without  paying  the  penalty  of  running  an extra
processor.

The RER  and RERUN commands  are similar  in form.  Both  are followed  by a
processor name, an optional core size for the processor, a double-arrow, and
a string (called the object string) terminated by a line feed.   SNAIL swaps
control to the designated processor after loading the object string into the
line editor buffer.   The only difference is  that the processor in  the RER
command is  retrieved from the  SYS: disk area,  while the processor  in the
RERUN command is  retrieved from the  user's own disk  area, or one  that he
specifies explicitly.  This distinction is  the same one made between  the R
and RUN monitor commands.

The PROCESS  command is  followed by  a double-arrow  and an  object string,
terminated by a  line feed.  After loading  the object string into  the line
editor buffer, SNAIL exits.

SNAIL preprocesses  the object  string for all  three commands  by replacing
occurrences of  the character double-arrow  ("↔") by a  carriage return-line
feed.    The   DO   processor   also   does   this.    However,   the  other
character-replacement features of DO are not currently implemented.

The RER and RERUN  commands are compatible in  the following way.  If  a RER
command with its arguments has  been previously given by the user  and saved
by SNAIL in a tmpcor file, and the user subsequently types RERUN without any
arguments, the effect will be that of typing RERUN with the arguments of the
previous RER  command.  That is,  the processor will  be retrieved  from the
user's disk area  instead of from the  system disk area.  Analogously,  if a
RER command with no arguments is given and the command file contains a RERUN
command, the  designated processor  is retrieved from  the system  disk area
instead of the user-specified disk area.  In either case, the core  size and
object string are processed as described above.

If a  PROCESS command is  given with no  arguments, the command  tmpcor file
must contain a PROCESS command.  If a RER or RERUN command is given  with no
arguments, the  command tmpcor  file must  contain a  RER or  RERUN command.
Otherwise an error message will  be printed and the line editor  buffer will
not be loaded.

Examples of use:

        RER IL↔(DSKIN FOO)↔
        PROCESS↔R IL↔(DSKIN FOO)↔
        RERUN IL[UCI,SYS]↔(DSKIN FOO)

The first two examples will do  the same thing.  The third example  could be
used  to allow  alternating use  of  RER and  RERUN to  compare  the current
version of ILISP with a new version.
                 SNAIL: COMPILE-Type COMPILE-Class Commands


The last type of COMPILE-class  command to be described is  the COMPILE-type
command.   There  are  six COMPILE-type  commands:  COMPILE,  LOAD, PREPARE,
DEBUG, EXECUTE, and TRY.  Following the command, the user lists  files which
are to be compiled or loaded.

All  COMPILE-class  commands  normally cause  compilation  of  the specified
source files.  All but the  COMPILE command may cause execution of  a loader
(LOADER or LINK) to create a core image, possibly including a debugger.  The
table below summarizes the actions of the COMPILE-type commands.

            REL file   Core Image   Debugger   Execution

  COMPILE     yes
  LOAD        yes         yes
  PREPARE     yes         yes          yes
  EXECUTE     yes         yes                  starts the user program
  TRY         yes         yes          yes     starts the user program
  DEBUG       yes         yes          yes     starts the debugger

The  COMPILE  command  takes  as arguments  one  or  more  file descriptors,
separated by commas.  SNAIL will cause the appropriate translator to be used
for each of the files.  The  COMPILE command does not produce a  core image;
to get an executable core image one of the other COMPILE-type  commands must
be used.

LOAD does a COMPILE if necessary and then starts a loader (LOADER  or LINK).
The loader  takes the .REL  files that were  generated by the  compilers and
combines them into  an executable core image.   When the loader is  done, it
exits to the monitor.   This command makes a  core image but does  not start
it.  If any SAIL program is loaded, the loader will be instructed to request
the current SAIL segment.

PREPARE is like LOAD, but a debugger (BAIL for SAIL programs, RAID for other
programs when the user  is at a display,  and otherwise DDT) is  loaded with
the user's program.

EXECUTE is like LOAD, but instead of exiting, the loader starts  the program
it loaded at its specified starting address.

The TRY command  is like EXECUTE,  but it loads  a debugger (BAIL,  RAID, or
DDT, as in the PREPARE command) with the user program.  Execution  starts at
the program's starting address.

DEBUG is  like TRY except  that rather than  starting the user's  program it
starts the debugger (RAID or DDT -- if the debugger is BAIL this  command is
treated  exactly  the same  as  TRY).  The  user  may give  commands  to the
debugger to start his program, to plant breakpoints, etc.

SNAIL  writes  tmpcor files  for  each processor  involved  in  compiling or
loading  the  files specified  in  the user's  command  string.   SNAIL also
attempts to minimize unnecessary compilations by checking the creation dates
for the files the user wants compiled; for example, if the command was

        EXECUTE X1.SAI,X2.SAI

and the file X1.REL  has a later creation  date than the file  X1.SAI, SNAIL
assumes that  X1.SAI has not  been changed since  it was last  compiled, and
omits X1.SAI when it tells SAIL which files to compile.  If the REL file and
the source file have the same time written, then the file is  compiled again
for safety, in case the source has been changed.

The user can override SNAIL's date-checking by specifying  certain switches.
A  SNAIL switch  is selected  by  including a  slash ("/")  followed  by the
appropriate switch name.  Switches which affect the date-checking actions of
SNAIL  are  the  following,  where  an  asterisk  ("*")  following  a switch
indicates that that switch selection is the default for SNAIL:

  /COMPILE    Force  recompilation  without  checking  the  dates  of .REL
              files.
  /-COMPILE * Check dates  of both  source, .DMP, and  .REL files  and act
              accordingly.
  /REL        Force loading from the .REL file if it exists.
  /-REL     * Check dates  of both  source, .DMP, and  .REL files  and act
              accordingly.
  /NOLOAD     Don't issue a loading request for this file.
  /-NOLOAD  * Issue a loading request for the file if one is called for.
  /LONLY      (Implies /COMPILE, /NOLOAD,  and /NODMP.)  A  listing should
              be made for this file, but no load request for it  should be
              issued.
  /-LONLY   * Treat this file normally.
  /CONLY      (Implies /COMPILE, /NOLOAD, and /NODMP.)   A cross-reference
              listing should be  made for this  file, but no  load request
              for it should be issued.
  /-CONLY   * Treat this file normally.
  /LIBRARY    (Implies /REL.)  Force the  loader to search this file  as a
              library.
  /-LIBRARY * Treat this file normally.
  /NODMP      Don't  include the  .DMP file  in date-checking  or deciding
              which file  to give  control to first.   This switch  has no
              inverse.

SNAIL remembers the last  COMPILE-type command with arguments it  was given,
just as it does for  DOCUMENT-type commands and LOADBUF-type commands,  in a
tmpcor file named CM.  This "remembering" may be turned off for COMPILE-type
commands by using the /NOCMFI  switch; if this switch appears in  a command,
the CM file  will not be  written for that  command.  This switch  is useful
when using either a LOADBUF-type command or the DO processor,  and including
within the  command string another  SNAIL COMPILE-class command;  if /NOCMFI
were not specified, the second command would be saved in the CM file instead
of the first.

The simplest way to translate  several programs is to create them  with file
extensions which define the processor to be used; then give a single COMPILE
command with all these names separated by commas.  (If a  standard extension
is  specified  for a  file,  SNAIL cannot  be  convinced to  use  some other
processor.)  Extensions which SNAIL knows about are the following:

  .FAI     signals a Fail program
  .SAI     signals a Sail program
  .MAC     signals a Macro program
  .F4      signals a Fortran program
  .PAL     signals a Palx program

SNAIL does  not require  file extensions  to be  typed explicitly.   For the
command COMPILE FOO, SNAIL  will look for any  file named FOO and  check its
extension.   If a  file FOO  is found  that does  have one  of  the standard
extensions, SNAIL will select the corresponding translator.  If a  file does
not have a standard extension, SNAIL can be told which translator to  use by
giving that information  in the command  string.  Switches which  tell SNAIL
which translator to select are the following:

  /FAIL    Process this file with the Fail assembler.
  /-FAIL   Process this file with some translator other than Fail.
  /SAIL    Process this file with the Sail compiler.
  /-SAIL   Process this file with some translator other than Sail.
  /MACRO   Process this file with the Macro assembler.
  /-MACRO  Process this file with some translator other than Macro.
  /F4      Process this file with the Fortran compiler.
  /-F4     Process this file with some translator other than Fortran.
  /PALX    Process this file with the Palx assembler.
  /-PALX   Process this file with some translator other than Palx.
                         SNAIL: More on File Names


A project-programmer name (PPN) may  be included with each file name  in the
command for COMPILE-type commands, just like for other SNAIL  commands.  The
PPN specifies the  disk area from  which the file is  to be read.   The PPN,
enclosed in square brackets ([ and ]), usually follows a file name;  in this
case the PPN applies only to the preceding term.  If a PPN appears  before a
file name, then that PPN is  sticky (i.e., it applies to all the  terms that
follow) for the rest of the command until another sticky PPN is seen.

A name followed  by a colon  (:) is a device  name (which is  sticky).  Some
devices are non-directory devices (for instance, TTY: and MTA:); a file name
need not follow specification of such a device.  For example, the command

        COMPILE TTY:/SAIL

compiles, using the SAIL compiler, input from the user's terminal.
                          SNAIL: More on Switches


Switches are allowed in COMPILE-class commands by including a slash  (/) and
the switch name,  e.g., /LIST.  Switches allow  the user to  select options.
In general, a switch placed  before a file name is sticky.   Switches placed
after a file  name are not  sticky; they apply  only to the  preceding term.
Specifying  a  minus ("-")  before  a  switch turns  off  that  switch.  For
example, the command

        COMPILE/FAIL A,B,C/-FAIL

will compile the files A and B using the FAIL assembler, and will  compile C
using some other translator depending on extensions of files with  file name
C.
                    SNAIL: Concatenation of Source Files


It is  often desirable to  break up  a program into  two (or  more) separate
files which have only  one END statement at the  end of the last  file.  One
reason for breaking up a program is because it is very long, and it would be
inconvenient  to  keep and  edit  such  a large  file.   Another  reason for
separating a program is to allow a portion of the program text to be shared.
Several files can be processed together as one big translation by separating
their names with plus signs (+) rather than with commas.  For example,

        COMPILE DATA+PROGRM

treats the files DATA and PROGRM as if they were one large file and produces
one relocatable binary file, PROGRM.REL.  SNAIL will not allow concatenation
of source files that specify inconsistent processors.

Normally, the REL file  will have the name of  the last file in  the command
string; it can be given some  other name by putting the desired name  and an
equals sign (=) at the front of the argument list, e.g.,

        COMPILE FOO=SYMS+PROGRM+IOPACK

would do one translation as if SYMS, PROGRM, and IOPACK were one  large file
and produce relocatable binary output on the file FOO.REL.

Occasionally,  a header  file must  be assembled  with several  other files,
e.g.,

        COMPILE ACUMS+SINE,ACUMS+COSINE,ACUMS+TANGNT

The brokets (< and >) feature allows this to be done more simply:

        COMPILE ACUMS+<SINE,COSINE,TANGNT>

Brokets may not be nested.  Also, a plus sign may not follow a right broket;
e.g., the following command is illegal:

        COMPILE <A,B,C>+ENDS 
                     SNAIL: Producing Symbolic Listings


Assembly listings have the original code as it appears in the file  plus the
octal values that the code  represents with the relative locations  that the
octal values go in.  Assembly listings can be generated by means of a /LIST,
/LONLY, /CREF, or /CONLY switch in the command.

The /LIST and /LONLY switches will produce a file with the same name  as the
REL file and extension LST.  Such  a file may be spooled or typed.   The two
switches differ  in that  the /LONLY switch  implies /COMPILE,  /NOLOAD, and
/NODUMP; i.e., it means  that the only thing to  do with the file is  make a
listing for it, and  no REL file will be  generated by the compiler  for the
source  file.  Note  that COMPILE FOO/LIST  will not  compile anything  if a
current FOO.REL exists (this  is another instance where the  /COMPILE switch
is useful).  The /LIST may be used  as a sticky switch or it may  be applied
to  particular  terms.   The  inverse  switches  are  /-LIST   and  /-LONLY.
(Processors other than the assemblers may also produce listings.)

If either the /CREF switch  or the /CONLY switch appears, instead  of /LIST,
it generates  an expanded listing  that includes a  list of all  the symbols
(identifiers) used in the program and the line numbers on which  each symbol
appears.  This  is called  a cross-reference  listing.  These  listing files
cannot  be  printed  directly.   Instead,  they  must  be  processed  by the
cross-reference lister program, CREF.  This is done by the CREF command (see
page  64).  The  /CONLY switch  differs from  the /CREF  switch in  that the
source file will always be compiled, and no binary file will be generated by
the compiler  for the source  file.  The distinction  between the  /CREF and
/CONLY  switches is  the same  as  that for  the /LIST  and  /LONLY switches
described above.  Note: not all the processors can produce a cross-reference
listing.  Consult the appropriate manual to find out if a given processor is
capable of generating one.
                SNAIL: Generating Core Images and DMP Files


The  commands  EXECUTE,  DEBUG,  LOAD, PREPARE,  and  TRY  each  generate an
executable core image.  Core images are made by translating source files (as
in the COMPILE command) and  then running a loader (either LINK  or LOADER),
which takes  the REL files  and produces  a core image  from them.   For the
DEBUG, PREPARE, and TRY commands, the loader is instructed to load a copy of
RAID (or DDT if the user is at a Teletype) and the program symbol table with
the core image.

Several SNAIL switches are relevant to the selection of a loader, and to the
actions of  the loader once  it starts loading.   These switches  are listed
below.  None of these switches may be negated; i.e., a minus sign may not be
used with them.

  /LINK    The LINK loader will be used to create the user's core image.
  /LOADER  The LOADER loader will be used to create the user's core image.
  /BAIL    If the command specified  a debugger (i.e., if the  command was
           DEBUG, TRY, or PREPARE), BAIL will be loaded.
  /RAID    If the command specified a debugger, RAID will be loaded.
  /DDT     If the command specified a debugger, DDT will be loaded.
  /MAP     The absolute values of all the global symbols will be listed in
           a legible way  on a file named  MAP.MAP; this may not  work for
           LOADER.
  /NOSAISEGThe Sail segment will not be loaded.
  /SAVE    A disk dump will be made of the core image.  The dump file will
           have the same name as the first REL file and extension .DMP; it
           can be given some other name by putting the desired name  and a
           left arrow (←) in the command string.  /SAVE is  unnecessary if
           the left-arrow construct is used.

The command

        TRY DUMP←SINE,COSINE/SAVE

translates the programs SINE and COSINE, producing SINE.REL  and COSINE.REL.
The LOADER is  run.  Because the TRY  command requests a  debugger, RAID.REL
(or DDT.REL) is  loaded from the system  area.  SINE.REL and  COSINE.REL are
loaded next.  Then  the LOADER makes  a dump copy of  the core image  in the
file DUMP.DMP and starts the program.

If  there already  exists a  DMP file  of the  right name  and if  it  has a
creation date more recent than those of the source files, no loading will be
done.  Instead, the  dump copy itself will  be called in.  Reloading  may be
forced by the /NODMP or /NODUMP switch in the command line.  Both  an equals
sign and a left arrow may be included in a command string.  For example:

   COMMAND                       REL       DMP

  TRY SINE+COS/SAVE            COS.REL   COS.DMP
  TRY DUMP←SINE+COS/SAVE       COS.REL   DUMP.DMP
  TRY DUMP=SINE+COS/SAVE       DUMP.REL  DUMP.DMP
  TRY FOO←DUMP=SINE+COS/SAVE   DUMP.REL  FOO.DMP
                          SNAIL: Library Searches


Several REL files may  be combined into a  library.  A library is  a special
REL file from which  routines may be independently selected.   Library files
are made by combining REL files together using the FUDGE2 program  (which is
described in  DEC documentation).   For example,  sine, cosine,  and tangent
routines  might be  combined  into a  trig  library, TRIG.REL.   Then,  if a
particular program used just the sine routine, instead of loading the entire
trig package it would be able  to select only the sine routine.   The loader
will search library files and  load only the programs that are  needed.  The
/LIBRARY switch after the name of a library file tells SNAIL to request this
loader feature.  The  /LIBRARY switch may also  be used as a  sticky switch;
its inverse is /-LIBRARY.  Suppose there is a program called NLT  which uses
the  sine  routine  that  was  included  in  TRIG.REL.   Then   the  command
LOAD NLT,TRIG/LIBRARY will cause NLT to  be loaded and TRIG to  be searched.
The LOADER notices that NLT requires SINE.REL and searches TRIG.REL  for it.
Suppose  another program,  XLT, requires  routines from  two  library files,
TRIG.REL and IOPACK.REL, and must  be loaded with another program  LT.  Then
any one of the following commands could do this:

        LOAD XLT,LT,/LIBRARY TRIG,IOPACK
        LOAD /LIBRARY XLT/-LIBRARY,LT/-LIBRARY,TRIG,IOPACK
        LOAD XLT,LT,TRIG/LIBRARY,IOPACK/LIBRARY

Programs which  use library  files must  be placed  before the  library file
names in the command.  This is because the loader cannot know  what routines
to extract from each library  until it has loaded the programs  that require
library routines.
                    SNAIL: Alternate Processor Features


Processors other than SAIL, FAIL,  FORTRAN, PALX, or MACRO may  be specified
by using  the alternate processor  feature.  The  switch /PROCESSOR DEV:NAME
specifies an alternate processor.  In  this switch, DEV (assumed to  be DSK,
if absent) is the device name on which to find NAME.DMP, the core image file
of the alternate processor.  Once the /PROCESSOR switch is used,  SNAIL will
recognize the extension NAM (i.e., the first three letters of  the processor
name) and  the switch  /NAME (the processor  name) in  the command  line.  A
project-programmer  name  or  device  name may  be  used  in  specifying the
alternate processor.

For example,  for a  user to translate  the program  SINE using  a processor
named PROC on his disk area, he could use the command:

        COMPILE SINE/PROCESSOR PROC

When a  standard processor is  used, it is  known that it  will take  a text
source file and  produce a binary  REL file, and  possibly a text  LST file.
With  alternate  processors  there  is  no  such  guarantee.   An  alternate
processor may process a text file  into a new text file which  becomes input
to a standard processor.  It is possible to specify all these functions in a
single COMPILE-type command.

If  an alternate  processor generates  a text  file instead  of a  REL file,
loading  must  be inhibited.   The  /NOLOAD switch  accomplishes  this.  The
/NOLOAD switch must be used for  each term that does not produce a  REL file
(except in the COMPILE command, which does no loading anyway).   The inverse
switch is /-NOLOAD.

Suppose the preprocessor, PRE, translates the file BAZ into a file FOO which
is a FAIL program.  FOO must be translated when PRE is done.  Also, MAIN and
SINE must be translated and loaded with FOO.  The command:

        LOAD FOO=BAZ/PROCESSOR PRE/NOLOAD,MAIN,SINE,FOO/FORWARD

will do all of this.  The /FORWARD switch is necessary because the  file FOO
does not  exist at the  time the command  is given.  Including  the /FORWARD
switch  prevents SNAIL  from looking  for FOO;  SNAIL will  assume  that FOO
magically appears before FAIL is called.  The inverse switch is /-FORWARD.

The  processor DO  (see  Section 5.7)  is  another example  of  an alternate
processor.   The  DO  program  writes  the  CM  tmpcor  file  to  force  the
exit-and-go command from the editors to run DO again.
                         SNAIL: Translator Switches


Switch names enclosed in parentheses "(" and ")" are passed directly  to the
translator.  The  documentation for  each of  the translators  explains what
switches  are available.   The switches  passed in  this way  appear  on the
source file specification.  Sometimes it is necessary to put switches on the
binary  or listing  term.   For this  purpose,  there are  two  other switch
constructions.

The construction (#1,#2), where #1 and #2 are any switch strings,  passes #1
to the binary term and  #2 to the source term.  The  construction (#1,#2,#3)
passes #1 to the binary term, #2  to the listing term, and #3 to  the source
term.  For example,

        COMPILE/LIST FOO(AX,BY,CZ)

will pass the  switch string "AX"  to the binary  term, "BY" to  the listing
term, and "CZ" to the source term.
                           SNAIL: Loader Switches


Switches  to  the  loader  may  be  specified  in  a  COMPILE-class command.
Switches to LOADER appear as a  percent sign (%) followed by a letter  (or a
number and a letter) in the command string of one of the LOAD, TRY, EXECUTE,
PREPARE,  or DEBUG  commands;  switches to  LINK  appear as  a  percent sign
followed by some character not  appearing in the switch string,  followed by
the switch string, followed by the character that appeared after the percent
sign.   In either  case,  the switch  string  is directly  specified  to the
appropriate loader.  Examples:

        EXECUTE FOO1,FOO2,FOO3%M
        TRY BIGPRG.SAI%100K
        TRY/LINK BIGPRG.SAI%"RUNCOR:100"

LOADER and LINK switches are listed at the end of this appendix.  For a full
description  of  what  the  other  switches  above  mean,  consult  the  DEC
documentation  for  LOADER  and  LINK.  The  LOADER  has  been  modified for
Stanford, so the DEC documentation does not accurately reflect the  state of
the software.  Consult a wizard if necessary.
                            SNAIL: Command Files


COMPILE-class commands are sometimes too long to fit on one line, or are too
complex to be typed correctly every time.  To solve this  problem, arguments
can be read from a file.  The text contained in such a file is read by SNAIL
as if it had been typed as the arguments to a command.  The command file may
contain any features available in a COMPILE-class command.  Any text between
a  semicolon  and  the  next  line-feed  is  ignored;  carriage-returns  and
line-feeds are  also ignored,  and hence may  not be  used to  separate file
names or other identifiers.

To use a term as a command file write an at sign (@) before the command file
name, e.g., LOAD @SYS.  Upon scanning  the at-sign followed by a  file name,
SNAIL  looks  for  a  command  file with  that  name;  if  no  extension was
specified, SNAIL checks first for the file with extension .CMD, then for the
file with no extension and  the specified name.  The command file  SYS might
look like the following file which is used to assemble the  entire operating
system:

     %S%B%? SYSTEM=HEAD(XLR)+OUTER+JOBDAT+ALLDAT+IMPDDB;
     +LOWCOR+SYSMAK+PARSER+SYSINI+COMCSS+CLKSER+PAGSER;
     +UUOCON+SPWSER+SCHEDU+SWPSER+CORE;
     +DPYSER+TTYSER+LINED;
     +DSKSER+DSKINT+DTCSER+MTCSER+FBPACK+TVSER+LPTSER+ELFSER+CARSER;
     +XGPSER+PTPSER+PTRSER+DACSER;
     +IMPCLK+IMPREG+IMPUUO+IMPINT;
     +PATCH+DDT+ONCE
                            SNAIL: CREF Command


This command  causes a cross-reference  listing to be  made.  All  the files
made from COMPILE-class commands which used the /CREF switch  are processed;
for each such  file, a cross-reference listing  is generated in a  file with
extension LST and the name of the file being processed.  (LOGOUT makes SNAIL
forget which listing  files to process.)   The CREF command  activates SNAIL
which in turn activates the CREF program in a special way.  The CREF program
when activated in this way reads a file that SNAIL wrote which  contains the
names of the files to process.
                       SNAIL: Switch Function Summary


A  "-" in  the column  headed "*"  means the  switch can  be  negated; e.g.,
/-COMPILE is legal.

  Switch     Abbrev *  Meaning

  /BAIL      /B        Use BAIL if a debugger is required.
  /COMPILE   /COM   -  Force re-compilation without checking the  dates of
                       REL files.
  /CONLY     /CON   -  Force re-compilation  and produce only  an extended
                       listing to be input to the CREF processor.
  /CREF      /C     -  Request a cross-reference listing.
  /DDT       /D        Use DDT if a debugger is required.
  /F4        /F4    -  Use F40 (FORTRAN) for this term.
  /FAIL      /F     -  Use FAIL for this term.
  /FORTRAN   /FORT  -  Use F40 (FORTRAN) for this term.
  /FORWARD   /FORW  -  Prevent SNAIL from looking for this file  to decide
                       if the REL file is up to date.
  /LIBRARY   /LIB   -  Force the loader to search this term as a library.
  /LINK      /LIN      Use the LINK loader to create the core image.
  /LIST      /L     -  Request a listing file.
  /LOADER    /LOA      Use the LOADER loader to create the core image.
  /LONLY     /LON   -  Force  re-compilation  and produce  only  a listing
                       file.
  /MACRO     /M     -  Use MACRO to translate this term.
  /MAP       /MAP      Request a loader map of global symbols.
  /NOCMFI    /NOC      Don't generate a CM command file for this command.
  /NODMP     /NOD      Force re-loading without checking the dates  of DMP
                       files.
  /NOLOAD    /NOL   -  Prevent a loading request for this term.
  /NOSAISEG  /NOS      Load SAIL programs with the SAIL library instead of
                       the SAIL segment.
  /PALX      /PA    -  Use  PALX  to translate  this  term  (produces .BIN
                       file).
  /PROCESSOR /PR    -  Specify an alternate processor.
  /RAID      /RA       Use RAID if a debugger is required.
  /REL       /RE    -  Force loading from the REL file if it exists.
  /SAIL      /S     -  Use SAIL to translate this term.
  /SAVE      /SAV      Force the  LOADER to  make a DMP  file of  the core
                       image.
                SNAIL: LOADER Switches and LINK Equivalents


  LOADER LINK              Meaning
  Switch Equivalent

  %A     %"CONTENT:ZERO"   Causes a  listing of all  global symbols  to be
                           printed.
  %B     %"SYMSEG:LOW"     BLT symbols down when done loading.
  %1B                      BLT symbols to upper segment.
  %C                       Chain beginning with Common.
  %D     %"TEST:DDT"       Load DDT.
  %E     %"EXECUTE"        Start up program when done loading.
  %F     %"SYSLIB"         Enter library  search mode; search  all default
                           libraries.
  %G     %"GO"             Finish loading, make final links, and exit.
  %H     %"DEBUG:RAID"     Load and start RAID.
  %I     %"NOSTART"        Ignore starting address of this program.
  %J     %"START"          Use starting address of this program.
  %nK    %"RUNCOR:n"       Adjust  to n  K of  core (2n  pages)  when done
                           loading.
  %L     %"SEARCH"         Search this file as a library.
  %M     %"MAP:END"        Print storage map.
  %N     %"NOSEARCH"       Leave library search mode.
  %nO    %"SET:.LOW.:n"    Set program origin to n, absolute.
  %P     %"NOSYSLIB"       Inhibit automatic library search  for undefined
                           globals.
  %Q     %"SYSLIB"         Allow automatic library search.
  %R                       Chain beginning with resident module.
  %S     %"LOCALS"         Load symbol table also.
  %T     %"DEBUG:DDT"      Load and start DDT.
  %U     %"UNDEFINED"      Print current list of undefined globals.
  %V     %"TRY:RAID"       Load RAID.
  %W     %"NOLOCALS"       Load without symbols.
  %X     %"CONTENT:NOZERO" Do not list all globals.
  %Y                       Load SAILOW for 2 segment SAIL programs.
  %Z     %"RUN:LINK"       Restart LOADER.
  %<                       Disallow loading into upper segment.
  %1<                      Allow loading into upper segment and load there
                           next.
  %n<                      (n≥400000) Set upper segment relocation to n.
  %-<                      Allow loading  into upper  segment and  load in
                           lower next.
  %?                       Sort symbols.
                           SNAIL: Error Messages

                               Obvious errors

No command file.
Incompatible commands.
        You gave a command with no arguments, and either no command had been
        saved or the two commands (the  one you typed and the one  which had
        been saved) aren't compatible.

Unrecognizable file name.
No such device.
Unrecognizable processor name.
        You mistyped a file or processor specifier.

Not a display.
        You're trying to load the line-editor buffer and you're not  using a
        display.

Missing double-arrow or invalid core size.
Missing double-arrow.
        The LOADBUF-type commands must always be followed by a double-arrow.

Too many files.
        Currently the PUB  and POX document  compilers can only  process one
        document at a time.

File not found.
        Either some file named in the command does not exist, or  it doesn't
        exist with the  correct extension.  You'll  get this message  if you
        try to use the /FAIL switch with FOO.SAI, for instance.

Unknown command.
Command error.
Illegal character.
        Something is wrong with what you typed, and SNAIL didn't find in the
        command what it expected to  find.  For example, a file  name didn't
        follow an at-sign.

Nested brokets illegal.
Unbalanced brokets.
Can't use "=" with brokets.
        You're not using  brokets correctly.  Each  of the files  within the
        brokets  will  produce  a  different  REL  file,  so  the equal-sign
        construct can't be used.

Unknown switch.
Negation of this switch not allowed.
Invalid switch string.
Illegal LOADER switch.
Illegal LINK switch.



                               Subtle errors

Empty command file.
Error in command file.
Tmpcor file too big.
        The CM command file which  SNAIL is attempting to read is  messed up
        somehow.

Storage overflow.
        Your  command included  too much  of something  (file  names, device
        names,  alternate  processor  specifications,  translator  or loader
        switches), or there are too  many files in your directory  that have
        to be date-checked.


               Horrible errors (a wizard should be consulted)

SNAIL bug.
SNAIL allocation error.
        Typing  CONTINUE  followed  by a  carriage  return  when  the latter
        happens might work.

Can't open channel.
        This is probably a bug in SNAIL.

Couldn't create file.
        A disk  file could  not be  written correctly.   Possibly a  file is
        write protected or in use by some other job.  Otherwise you may need
        help.

UFD missing.
        You are aliased to a non-existent disk area.  Otherwise, you  need a
        wizard.
                              APPENDIX 2--COPY


This appendix is taken  from COPY.RPH[S,DOC], SAILON 61.1, the  COPY manual.
The manual first describes the basic COPY command with all possible options,
and then lists the other monitor commands which run COPY and describes their
special functions.
                                COPY: Syntax


In  this  section  the  following rules  are  observed.   Anything  in curly
brackets is optional.  Anything enclosed in brokets (e.g., <.......>)  has a
syntactic definition of its own and is described elsewhere.  Upper and lower
case letters are  legal anywhere.  A break  character is something  which is
not a letter, a number, or  a "*".  This will become important when  you try
to figure out some  of the error messages.   In this manual the  term sticky
means that the sticky item is  applicable until changed or until the  end of
the current command.

The basic syntax for all COPY commands is:

COPY {{<destination term>}{,<list term>}←}<source term>

The character "{ }="{ } may be substituted for "{ }←"{ }.

  <destination term>::=<switch term>
  <source term>::=     <switch term>{,<source term>}
  <switch term>::=     {<switch list>space}<term>{<switch list>}
  <list term>::=       <term>
  <term>::=            {dev:}{filnam{.ext}}{[prj,prg]}
                       | {<switch list>}{dev:}{[prj,prg]}{<switch list>}
                            @<spec term>
                       | \<filehack selector>
                       | ∂{ <pn> | * }{.ext}{[prj,prg]}
  <spec term>::=       {<spec switch list> }{dev:}{filnam{.ext}}
                            {[prj,prg]}{<spec switch list>}
  <switch list>::=     {/<switch>}{(<page list>)}{<switch list>}
  <spec switch list>::={/<switch>}{<spec switch list>}
  <page list>::=       <page term>{,<page list>}
  <page term>::=       N{:M}
                          COPY: General Operation


COPY  reads data  from the  logical file(s)  indicated by  the  source term,
performs any operations requested by the switch term(s), and writes the data
on  the  logical  file  indicated  by  the  destination  term.   Any listing
information goes to the list term.

Dev and p,pn are sticky in the source; that is, if they are absent, the last
one specified is used.   The default device is  DSK and the default  p,pn is
blank (those of the current job).

A single * may be substituted for any of the following:

  filnam
  ext
  p
  pn

A * in the source term means "all."  A * in the destination term means "same
as in source file being transferred."

If filnam.ext  is absent in  the destination term,  *.* is assumed.   If the
destination  filnam.ext are  specified (no  *'s), all  source files  will be
concatenated into one big file with that name.

For example:

COPY DING←FOO,BAZ

would cause a file named DING  to be created on your disk area  comprised of
the files FOO and BAZ from your  area.  If filnam.* or *.ext is used  in the
destination term, the source files  will be copied onto the  destination one
by one with the new filename or extension.  <destination term>← may  be left
out and DSK:*.*← will be  assumed.  For source terms with  directory devices
you must specify the filnam.ext.

If you try to write on top of a file which already exists, you will be given
the option  of deleting  it or  not.  If any  of the  source files  you have
specified do not exist, you will be informed and given the proper option.

If a string of source descriptors is specified, the string is  executed from
left to right.

You cannot write a  file in two different modes  (e.g.  FIL1←TTY:,DSK:FIL2).
However FIL1←TTY:,DSK:FIL2/ASCII is quite acceptable (/ASCII causes the data
mode to be 0).  Data modes are explained in the UUO Manual.

The <spec  term> construct causes  the scanner to  continue scanning  in the
file specified by the term.  The term must indicate a unique file.  When end
of file occurs the scanner again reads from the terminal.  No spec terms may
appear  in the  file.   Switches preceding  the  "@" are  treated  as sticky
switches.  Switches following  the "@" are  treated as sticky  switches only
while reading from  the indirect file.   In a sense  the indirect file  is a
"program block."  Upon leaving the  "block" all defaults are reset  to those
in force just before the "@".   A device name and p,pn may precede  the "@",
in which case the defaults are  changed to those, but no operation  is done.
The  device  and p,pn  used  in the  spec  term do  not  affect  the current
defaults.

The \<filehack selector> construct for a term is a special shorthand feature
to  allow commonly  referenced files  which would  normally require  a large
amount of typing to  be entered quickly.  The  following is a list  of legal
filehack selectors and what they are short for (<prg> stands for the current
programmer name right justified).  Only enough letters to  uniquely identify
the name among those in this list need be typed.

  Filehack
  Selector File selected       What for?

  MSG      <prg>.MSG[2,2]      Current user's mail file
  MAIL     <prg>.MSG[2,2]      Current user's mail file
  PLAN     <prg>.PLN[2,2]      Current user's plan file
  PLN      <prg>.PLN[2,2]      Current user's plan file
  NAP      <prg>.NAP[2,2]      Current user's NS notification file
  NS       <prg>.NAP[2,2]      Current user's NS notification file
  RPG      *.RPG[*,<prg>]      All of current user's RPG files
  OPTION   OPTION.TXT[*,<prg>] All of current user's option files
  DOWN     MAINT.TXT[2,2]      System downtime forecast
  DIGEST   DIGEST[2,2]         Latest A.P. news digest
  NOTICE   NOTICE.TXT[2,2]     System message file
  GRIPES   GRIPES.TXT[2,2]     System gripe file
  DAY      DAY.TXT[2,2]        Daily birthday or holiday message

The ∂{<pn>|*} construct  is another form  of shorthand for  referencing MAIL
files  (see Appendix  4).  If  no argument  follows the  ∂ then  the current
user's mail file is indicated.  If  <pn> is used, it means that  user's mail
file.  And lastly, if *  is used the file NOTICE.TXT[2,2] is  selected (this
is the  public mail  file).  The  default extension  (.MSG) and  PPN ([2,2])
implied by  ∂ can  be explicitly  overridden, e.g.,  ∂PRG.PLN will  get user
PRG's plan file.

There is a page counter in COPY which monitors ASCII output for  form feeds.
When a form feed is encountered, the counter is incremented.  If a page list
is used in a term, N is taken as the starting page of this output and  M (or
N  if M  is absent)  as the  ending page.   Output is  only active  when the
counter is within the range of the page list (e.g., LIST COPY(21) would list
page 21 of  the file COPY).   When the end of  the first term  is exhausted,
control  is  transferred  to  the  next term,  and  so  on  until  the right
parenthesis is reached, at which point output ceases.  If more than one file
is indicated,  the page  list is re-scanned  for each  one.  Page  lists are
never sticky.  An  asterisk (*) may  be used in a  page list instead  of the
final page number, to denote the last page, e.g., LIST COPY(3:*)  would list
all but the first two pages of the file COPY.

Switches will  be described in  a section  of their own.   See /LIST  for an
explanation of "list term."

Logical device  names may be  used, but all  switches apply to  the physical
device.  The following are legal physical devices for the copy command:

            DSK     UDPn    DTAn    MTAn    TTYn
            LPT     XGP     PTR     PTP     TTY

When the  special character ↓  (↑A on Teletypes)  appears, the  scanner will
read the line character-by-character without interpretation until the next ↓
(or  ↑A).   This is  useful  for allowing  non-alphameric  characters  to be
included in filenames, e.g., editor or spooler temporary files.

For numeric input there is always a default radix (either decimal or octal).
Sometimes, however,  it is desirable  to force one  or the other.   A number
preceded  by  a single  quote  is  always interpreted  in  octal.   A number
preceded by a double quote is always interpreted in decimal.
                         COPY: Device Peculiarities


Non-Directory Devices:

If  the source  device  doesn't have  a  directory and  the  filename and/or
extension is specified by a *, then a generated filename and/or extension is
used.   The  generated  filename  starts out  as  AAAAAA  and  the generated
extension starts  as COP.  Either  of these may  be changed by  specifying a
filnam.ext in  the source  term.  If  a star (*)  is used,  the old  name is
retained; otherwise it is replaced by the new one.  At the beginning of each
term  the  filename  is  either  changed  to  that  which  was  specified or
incremented by one letter (i.e., AAAAAZ.COP is followed by AAAABA.COP).  The
following example may clear things up:

COPY DSK:*.*←MTA0:,,FOO.*,,*.BAZ

This would read 5 files from MTA0 and give them the following names:

  AAAAAA.COP
  AAAAAB.COP
  FOO.COP
  FOOA.COP
  FOOB.BAZ

Disk:

If you attempt  to write on  an area which is  protected by a  password, you
will  be asked  the  password.  If  you answer  <cr>  to the  request  for a
password COPY  will assume  that you don't  know it  and do  the appropriate
thing.   You may  delete  files belonging  to other  users  (please exercise
extreme care).   However, if you  attempt to  delete a file  on a  user file
directory whose  programmer name  is different  from the  one you  used when
logging in, you will be asked  if you are sure.  All normal  file protection
applies to deletions.

User Disk Pack:

COPY treats new format (file structured) UDPs like the main file  disk.  The
file-structure  simulation which  COPY provided  for old  format UDPs  is no
longer available.

DECtapes:

DECtapes are assumed to be in PDP-6 format (which is the current  format our
system uses).  See the UUO Manual for an explanation of DECtape formats.  If
the directory becomes full (more than 30 files), you will be told  which was
the  first file  not transferred.   If the  DECtape becomes  full,  the file
currently being  written may be  incomplete.  An attempt  is made  to detect
this condition  before the  transfer is  initiated, but  this is  not always
possible.  The total  file capacity of a  DECtape is about 71.4K  words.  In
order to write  on a DECtape the  OFF-WRITELOCK-WRITE switch must be  in the
WRITE position.  If not, you will be told to set it.

Magnetic tapes:

Mag tapes may  be made to  look like directory devices  by use of  the /SAVE
switch which  is described later.   All mag tape  switches are  separate for
input and output (see rules  about switches in switch section).   This means
that mag  tape switches in  the destination term  don't apply to  the source
terms.

Paper tape:

Paper  tape I/O  is  done in  binary non-checksummed  mode  unless otherwise
specified (see /ASCII).  You should turn off the paper tape reader  when you
are done.   A paper tape  with a jagged  end may cause  spurious data  to be
read.  It is best to tear it evenly at a fold.

Teletypes:

Since some terminals cannot reproduce the full Stanford character  set, COPY
provides the standard SOS  conversion for output of some  special characters
on model 33 and model 35 Teletypes which are not in full character set mode.
See Appendix 13 for the SOS representation.

On display terminals,  COPY displays the number  of the page being  read (if
>1) if reading in mode 0, i.e., the number of form feeds seen +1.

Spooling pseudo-devices:

COPY recognizes two pseudo-device names, TPL: and PGX:, to allow spooling of
the output  of some copy  function to the  LPT or XGP,  respectively.  These
device names may be used only in output terms, and may not be used with file
names.   COPY  creates a  file  on the  [SPL,SYS]  directory  containing the
desired output, and  enters a spooling  request for the  appropriate device.
The file is deleted after spooling.  For a standard COPY command, the effect
is essentially  equivalent to  the recommended  SPOOL/RECOPY (see  page 75);
the main advantage of this capability is for direct spooling of  list terms,
e.g.,

DIRECTORY TPL:←[*,SYS]

to spool a list of the [*,SYS] file directories.  (Note: It is  claimed that
these  pseudo-device  names stand  for  The Pseudo  Lpt  and  Pseudo Graphic
Xerox-machine respectively.)
                               COPY: Switches


The term sticky means  "applies until the end  of the line or  until changed
temporarily or permanently by  some means."  Most switches appearing  in the
destination term are carried over  as sticky switches in the  source.  Those
switches which are separate  for destination and source terms  are indicated
by a star (*) preceding  the switch name.  Switches appearing in  the source
term  are sticky  only if  they  precede the  term with  which  they appear.
Otherwise, they apply only to the current term and must follow it.  Only the
first six characters of a switch are significant.  You are only  required to
use enough characters to uniquely specify the switch.

The following switches are now available:

  SWITCH         ABBREV MEANING

  ALL            AL   This switch includes all of the input file in the
                      output even if  the file uses the  offset feature
                      on the disk to "hide" some data at the beginning.
                      See the disk offset feature in the UUO Manual.
  ASCII          A    This forces  transfers to  be in  ASCII.  Beware!
                      This switch will cause SOS line numbers to become
                      part of the text.
  ASK            ASK  This  causes dev:filnam.ext[p,pn]  to  be printed
                      for each file  under consideration followed  by a
                      question mark.  If  you answer "Y"  the operation
                      will  proceed, if  you answer  "G"  the operation
                      will proceed  but you will  not be asked  the for
                      the rest of the term, otherwise the file  will be
                      skipped.
  BINARY         B    This causes  the data  mode to  be 13  and forces
                      word by word transfer of data.
  BLOCKED        BL   This  causes  records  to  be  ended   on  output
                      whenever they are ended on input.
  CONVERT        C    This causes copy to treat the character following
                      a line feed and the first character of a  file as
                      a  FORTRAN control  character.  Be  careful, this
                      happens on output.
  *DENSITY=n     DE   This sets the density in bpi to n where  n equals
                      800,  556, or  200.  This  switch is  ignored for
                      devices other than mag tapes.  The system default
                      density is 556.
  *DSPOOL        DS   This switch, when  used with destination  or list
                      terms, causes the output file to be  spooled with
                      the /DELETE switch.  Output device must  be disk.
                      This switch is illegal in source terms.
  DUMPED         DU   This  causes  each  36 bit  word  from  the input
                      device   to    be   converted   to    the   ASCII
                      representation of the octal number  it represents
                      and to  then be sent  to the output  device.  The
                      following  format is  used.  A  "word  number" is
                      sent to the  output device which  indicates which
                      word in the file  is the first word in  this row.
                      Then  8  data  words  are  transferred.   Then  a
                      <cr><lf> is inserted.  If desired, a  "page list"
                      may be  used for /DUMP;  however, the  values are
                      those of  word addresses in  the file  instead of
                      pages.   However, if  the /SEARCH  switch appears
                      before  this  switch  (or  the  DIRECTORY monitor
                      command was typed),  this switch has  a different
                      meaning: it includes in the directory listing the
                      date on  which the  file was  last included  in a
                      system DART dump, and  the number of the  tape on
                      which  it  was  dumped.   If  the  file  has been
                      permanently dumped  twice or more,  the character
                      ">" appears after the tape number.
  *EVEN          EV   This sets mag tape transfers to even parity.
  EXTRA=n        EX   Whenever a line feed  is seen n extra  line feeds
                      are  put  out;  n  must  be  an  unsigned decimal
                      integer.  If  n=0 line feeds  are converted  to a
                      177 followed by a 21; this inhibits form ejection
                      at page boundaries on the line printer.
  EXTRA≡n        EX   (Note "≡" not  "=".)  This switch, used  with the
                      XGP only, sets the inter-line spacing to n raster
                      units.
  FAST           F    All the  names specified by  the source  term are
                      listed (no size  or other info).  This  switch is
                      therefore much faster than /SEARCH.
  FONT#n=file    FON  This switch  is used when  copying to the  XGP to
                      select a font.  Font  number n (default is  0) is
                      taken   from  the   specified  file.    The  file
                      specification  can   include  any   of  filename,
                      extension,    and   PPN;    the    defaults   are
                      FIX25.FNT[XGP,SYS].
  FOO            FOO  This switch is  used to produce a  file directory
                      listing  meant  to be  read  by  various programs
                      rather than  by a human  being.  The  switch name
                      derives from the fact that the switch was created
                      for the  benefit of  layout and  drawing programs
                      used in  the design of  the late,  lamented SUPER
                      FOONLY computer.
  FULL           FU   If  /SEARCH  is specified,  this  switch provides
                      more  information than  is usually  given  in the
                      directory   listing;  specifically,   it  implies
                      /UFDPRO,   /TIME,   /PROTECTION,   /WRITER,   and
                      /REFERENCED.  Also, if you are at a Data  Disc or
                      III display  terminal, it implies  /DUMPED.  This
                      switch does not automatically imply /SEARCH.
  GTOTAL         G    At the beginning of  the execution of a  term the
                      term is printed.  At the end of the term,  a line
                      is typed of the form

                                  TOTAL=  x.x  n BLK  pp%

                      where x.x is the size of the file in K and tenths
                      (if  the file  is smaller  than 1K,  the  size in
                      words is typed instead), n is the number  of disk
                      blocks  allocated  to  the file,  and  pp  is the
                      percent of the allocated space which  is actually
                      used.  This switch implies /SEARCH.
  HEADER         H    This causes a header to be put out at  what would
                      be the top of each page on the line printer.  The
                      header looks like this:

                  DATE  TIME     FILNAM.EXT    P,PN       PAGE N-M

                      The  current date  and time  are used,  N  is the
                      logical page  number (number  of form  feeds seen
                      plus one),  and M  is the  physical page  of that
                      logical page.
  IGNI           IGNI This  causes  input  errors  to  be  ignored  (no
                      message).
  IGNO           IGNO This causes output errors to be ignored.
  KILL           K    The input file  is deleted after the  transfer is
                      finished, even if the output filename is the same
                      as the  input filename.   If the  200 bit  in the
                      file's protection  code is  on, COPY  asks before
                      deleting the file.
  LIST           L    This causes  the names  of the  files transferred
                      during  that term  to  be listed.   If  the input
                      device is  the disk the  [p,pn] are  also listed.
                      Non-directory   devices   will   obviously   list
                      nothing.  The output will go to the  "list term".
                      If the list term is absent, the output will go to
                      your terminal.
  *MLENGTH=nnnn  M    This  allows  the  user  to  specify  nonstandard
                      length records for mag tape I/O, where nnnn  is a
                      1 to  4 digit number  interpreted in  octal which
                      specifies the number of data words per record.
  NONUMBERS      N    This deletes  line numbers  from files  that have
                      them.   This forces  an ASCII  mode  transfer; in
                      fact,  /NONUMBERS  can  be  used  on   any  ASCII
                      transfer.  Do not use this switch on anything but
                      text files or you will be sorry.
  NOFF           NOF  This  suppresses output  of  formfeed characters.
                      It implies /ASCII,  and can be applied  to single
                      source files.
  NOSPACES       NOS  This  switch eliminates  spaces at  the end  of a
                      line.
  ODD            OD   This sets mag tape transfers to odd parity.  This
                      mode is standard and is the default option.
  OFFSET         OF   This switch implies /SEARCH, and causes  the file
                      offset  (in  decimal)  to  be  included   in  the
                      directory listing.   The offset,  if any,  is the
                      number of  "hidden" records  at the  beginning of
                      the file which will not normally be seen when the
                      file  is  read.   See  the  UUO  Manual  for more
                      information about offsets.
  OPTIMIZE       OP   This  forces  COPY  to  treat  the  file  as  one
                      produced by SOS, and to pack it by allowing lines
                      to span  a record break  as long as  line numbers
                      are not the last word of a record.  SOS will read
                      an OPTIMIZEd  file, but will  not write  a record
                      ending with a partial line.  A file  which cannot
                      be read  by SOS because  of line numbers  or page
                      marks at the ends  of records will be  "fixed" by
                      this switch.
  PROTECTION     P    If this  switch is preceded  by /SEARCH  (or used
                      with  the DIRECTORY  monitor command),  it causes
                      the protection of the listed files to be included
                      in the listing and implies the /UFDPRO  switch to
                      print the  UFD protection  and the  UFD's default
                      file  protection.   Otherwise, it  must  be given
                      with  a  protection  code  and  has  a  different
                      meaning, as in the following paragraph.
  PROTECTION=nnn P    This  causes   the  output   file  to   have  the
                      protection nnn, where n  is a digit from 0  to 7.
                      If  no   protection  switch  is   specified,  the
                      protection  of  the  input  file  is   used  (for
                      non-disk input 000 is used).  All three  n's must
                      be  present.  This  switch applies  only  to disk
                      output.  When concatenating files, the protection
                      applicable to the first file transferred is used.
  QUIET          Q    This switch prevents you from getting the message
                      "FILE  ALREADY  EXISTS...."  If  the  output file
                      already exists,  it is  deleted without  a sound.
                      Also, if this  switch appears with  /SEARCH, then
                      only  the  p,pn and  the  size on  that  p,pn are
                      printed.  This  switch also prevents  being asked
                      for  confirmation when  trying to  delete  a file
                      with the 200 bit on in its protection code.
  REFERENCED     REF  This switch is  like /SEARCH below,  but includes
                      in   the  directory   listing  an   extra  column
                      containing the date  on which each file  was last
                      read (referenced by LOOKUP).
  RENAME         REN  A  rename  is done  on  the input  file  with the
                      output file information.  /QUIET applies when the
                      output filnam.ext already exists.
  *SAVE          SA   If the output device is a mag tape, four words of
                      directory information are written.  If  the input
                      device  is a  mag tape,  four words  of directory
                      information are read and compared with the source
                      name specified.  If  they don't match,  that file
                      is skipped and the next examined until a match is
                      found or the end of tape is reached.
  SEARCH         SE   This  switch  overrides all  other  switches.  It
                      gives  you   more  information  than   /LIST  and
                      suppresses  any  transfers.  Added  to  the /LIST
                      information, you get the  size of the file  in 1K
                      blocks (or in words if less than 1K) and the date
                      it was last written.   If you are at a  Data Disc
                      or III display  terminal, it also lists  the time
                      when the file was written.  The information given
                      can be  further extended  by the  switches /FULL,
                      /TIME,    /PROTECTION,    /WRITER,   /REFERENCED,
                      /DUMPED, and /OFFSET.  (The offset will always be
                      listed if nonzero  for a particular file.)   If a
                      list  term  is  specified,  all  of  the possible
                      information is  listed.  The  output goes  to the
                      same  place  as with  /LIST,  with  the following
                      variation:  If the  "list term"  is  omitted, the
                      listing goes to your terminal and the information
                      and heading for  disk input will be  truncated to
                      FILNAM.EXT, [P,PN], and SIZE.  If /QUIET  is used
                      with this switch and no list term  was specified,
                      only the  p,pn and  the total  size of  each disk
                      area is printed.
  *SPOOL         SP   This  is  the  same as  /DSPOOL  except  that the
                      /DELETE switch is not used in spooling the file.
  TIME           TIM  This  switch  implies  /SEARCH,  and  causes  the
                      directory listing to include the time as  well as
                      the date when the file was last written.
  TITLE          TIT  This causes a "title page" to be put out in large
                      block letters followed by a form feed.  The title
                      is of this form:

                                  FILNAM.EXT

                                  P,PN

                                  TIME

                                  DATE

                      The  date and  time are  when the  file  was last
                      written.   For  non-directory   devices,  <device
                      name>:  is  printed in  place  of  filnam.ext and
                      p,pn.
  UFDPRO         U    This switch implies  /SEARCH but also  causes the
                      UFD  protection   and  the  UFD's   default  file
                      protection to be printed for each PPN for which a
                      header is listed.  These two protection codes are
                      output on the PPN's header line in  the following
                      form:

                          [PRJ,PRG]       UFD PRO=405; DEF PRO=000

                      The  /UFDPRO switch  is implied  by /FULL  and by
                      /PROTECTION (in a DIRECTORY command  or following
                      /SEARCH).   To get  just these  protections typed
                      out    (without   listing    any    files),   use
                      DIRECTORY [PRJ,PRG]/Q/F/U.  Note that if  the PPN
                      header is  not printed,  the UFD  protection will
                      not be listed.
  WAIT           WA   This switch  will automatically  wait for  a busy
                      device (e.g., XGP) without requiring confirmation
                      by the user.
  WRITER         WR   This switch includes the PPN and job name  of the
                      last  writer in  the directory  listing  for disk
                      files.  It implies /SEARCH.
                           COPY: Monitor Commands


The following is a list of the monitor commands which use COPY and  how they
work.  The syntax is the same as for COPY.

  COMMAND  EFFECT

  DELETE   This deletes all the files specified by the source term, and
           types the  space reclaimed as  with the /GTOTAL  switch.  If
           the 200 bit  is on in the  file protection key, you  will be
           asked  if  you  really  want  to  delete  the  file  (/QUIET
           overrides   this   feature).    The   destination   term  is
           interpreted as  the list term.   The list term  is therefore
           illegal.
  DIRECTORYThis gives you all or  part of the file information  for the
           source term(s) (or  *.* if no source  term is used).   If /L
           appears  anywhere in  the  command string  the  default list
           device will  be set  to the  line printer.   The destination
           term is treated the same as for DELETE.
  LIST     This sets the default output device to the line  printer and
           turns on the /HEADER switch.
  PRINT    This sets the default output device to the line  printer and
           turns on the /NONUMBERS and /TITLE switches.
  RENAME   This allows you to change the filename, extension,  PPN, and
           protection of a  file.  The format is  newname←oldname.  Use
           /PROTECTION=nnn to change protection.
  TRANSFER This copies files from one place to another and  deletes the
           source files.
  TYPE     This sets the default output device to your terminal.
  XGPLIST  This sets the default output device to the XGP.
                               COPY: Examples


COPY DTA4:←*.*

This would cause all the files on your disk area to be written on DTA4.

COPY ←DTA4:*.*

This would cause all the files on DTA4 to be written on your disk area.

COPY <filnam.ext>/NONUMBERS

This would delete sequence numbers (if any) from the file indicated.

COPY [2,RPH]←*.*[1,RPH]

This would cause all  the files on 1,RPH to  be copied onto 2,RPH  no matter
who you are logged in under (subject to file protection failure).

TYPE <filnam.ext>

This would cause  the specified file  to be listed  on the terminal  you are
logged in on.

LIST <filnam.ext>(2)/NONUMBERS

This would  cause page  2 of  the specified file  to be  listed on  the line
printer with headers and without line numbers.

DIR LPT:←*.TXT[*,*]

This would cause  the filnam.ext, [p,pn], size,  etc.  for all files  in the
world with the extension TXT to be listed on the line printer.

COPY FOO←TTY:,FOO/ASCII

This would allow you to add text at the beginning of the file FOO (/ASCII is
mandatory).

RENAME FOO/PROTECTION=077

This would  change the protection  of the  file FOO to  077 without  doing a
transfer.

PRINT FOO

This  would cause  the file  called FOO  to be  listed on  the  line printer
without line numbers and with a title page.

DIR[*,RPH]/QUIET

This  will tell  RPH the  size of  each of  his areas  without  printing the
filenames and other information.

COPY TEMP←↓$ED$09↓.TMP

This copies the file $ED$09.TMP into  TEMP so that you can edit  it.  (These
names are created by SOS.)

DELETE @DEL

This would use the file DEL as  a list of files to be deleted.   This method
is very good for "cleaning" your area.

DIR FOO/WRITER

This would list the standard  directory information for file FOO  along with
the PPN and job name of the job that wrote the file.
                             APPENDIX 3--SPOOL


This  description of  the SPOOL  commands is  taken from  the  SPOOL manual,
SPOOL.REG[UP,DOC].

Spooling  provides a  method  of producing  line printer  listings  of files
without the usual disadvantage of tying up a user's job while the listing is
actually being done.

To use the spooler,  a user must create commands  for it.  A command  is the
name of a file to list, and control switches.  Spooler commands  are created
by the monitor commands SPOOL and XSPOOL.

As an example of spooling, the monitor command

SPOOL SPOOL.REG[UP,DOC]

will cause the LPT spooler to list the file SPOOL.REG[UP,DOC].

Spooled listings are preceded by  a title page (except see  /NOTITLE below),
used to make  it easy to separate  different listings.  This  title includes
the file identifier,  the name of  the requestor and  his project-programmer
name, the current  date and time,  and the date and  time when the  file was
last written.   Programmer names are  read from the  file FACT.TXT[SPL,SYS].
Project  names   (of  which  there   are  few)  are   read  from   the  file
XFACT.TXT[SPL,SYS].

In the discussion below, "SPOOL" is used to mean either the command SPOOL or
the  command XSPOOL,  except as  noted.  SPOOL  makes requests  for  the LPT
spooler; XSPOOL makes requests for the XGP spooler.

To have  the spooler  make a  listing the  user must  tell the  spooler what
file(s) to print.  This easiest way to tell the spooler what to do is by the
monitor command SPOOL.  This command consists of the word SPOOL  followed by
the  name(s) of  the file(s)  to  be listed.   File names  are  separated by
commas.  Each file name may  be followed by switches, explained  below.  The
program SPOOL will send commands to the spooler.

Files to  be spooled are  specified in the  conventional way, by  file name,
extension, and optionally project-programmer name.

Asterisk, *,  may be  used to allow  matching of  any file  name, extension,
project name,  or programmer  name.  (RPG, DMP,  and REL  files will  not be
matched by * in the extension).

Switches are allowed either preceding or following the file  name.  Switches
that precede the name are sticky and will be applied to subsequent names.  A
switch consists  of a slash,  the switch name,  and sometimes,  a parameter.
For example, /REPEAT=5.

The following switches are available.  Note that most switches occur  in two
senses (e.g., delete and nodelete).  This allows an explicit switch  in some
term to override a sticky switch.

  Switch      Action

  DELETE      DELETE this file after printing.  The file protection
   NODELETE   of  this file  must be low enough so that the spooler
              can delete it.  The file must belong to the requestor
              (alias not allowed).
  NONUMBER    Omit SOS line numbers  from  the  listing.  "N" is an
   NUMBER     accepted abbreviation for NONUMBER.
  FORTRAN     The first character of each  line is interpreted as a
   NOFORTRAN  FORTRAN carriage control character.
  LPT100      The spooler will open the LPT in mode 100, instead of
   LPT0       the usual mode 0.  This changes some character codes.
  HEADING     Print a page heading at the top of each page.  "H" is
   NOHEADING  accepted as HEADING.   HEADING is the default for all
              files, except:
                  LST or DOC extensions,
                  any file from any area with programmer = DOC.
              The heading includes date, time,  filename, and  page
              numbers.
  TITLE       Precede the listing with a title page.   TITLE is the
   NOTITLE    default for all files.
  NARROW      Center the title page to fit an 8.5 inch wide page.
   NONARROW
  RECOPY      Copy the file to  [SPL,SYS]  and list the copy.  This
   NOCOPY     allows  the file to be edited while the listing is in
              progress.
  REPEAT=n    Make n copies of the listing.  (REPEAT is NOT sticky,
              and is not allowed in XSPOOL.)
  EXTRA=n     Insert n extra line feeds in the listing  after every
              line feed in the file.  (EXTRA is NOT sticky).
  DUMP        Octal listing.  Data will be printed  as  octal  full
   NODUMP     words.  (OCTAL is an equivalent switch.)
  NOFF        Each line feed in the file is translated to  '177&'21
   FF         which causes single spacing with no form-feed between
              pages.
  NOWARN      Suppress "spooling done" typeout after listing.
   WARN
  ASK         Before making the spool command, SPOOL will  type the
              file name and wait for the user to answer with "Y" to
              spool the file.  (This is useful with *.* terms).
  HOLD=hhmm   The listing will be held in the queue  until the time
              specified by hh hours, mm minutes.   (24-hour time is
              assumed.)  If hhmm is prior to the current time, hhmm
              tomorrow is assumed. HOLD is not allowed with XSPOOL.
  MODE=n      Open the file in mode n (n is octal).

File specifications may be read  from an auxiliary file by including  in the
command line the name  of the auxiliary file  preceded by @.  This  file may
include file names and switches.
                           SPOOL: Delayed Listing


Usually  requests  for spooled  listings  will be  processed  as  rapidly as
possible.  Under some circumstances this may not be desired.  For example, a
long listing impacts the normal  operation of the system by making  the line
printer unavailable during its duration.  The spooler allows users  to delay
such  listings  until  a  time of  minimum  loading  (e.g.,  0500)  when the
unavailability of the  line printer is less  likely to interfere  with other
users.

If  the construction  /HOLD=hhmm  appears in  a  command line  then  hhmm is
interpreted as the (24 hour) time of day when the listing should actually be
sent to the line printer.  In the example below, 1730 will be interpreted as
5:30 PM.

Example:

SPOOL SYSTEM.LST[S,SYS]/HOLD=1730

If the time specified is smaller than the current time, it is interpreted to
mean, "list the file  tomorrow at the time  specified." That is, if  at 10PM
you give the command:

SPOOL BAZ.FAI/HOLD=400

then the listing will occur in six hours.

Delayed listings and the /HOLD  switch are not allowed with spooling  on the
XGP (XSPOOL).
                           SPOOL: Page Selection


You may  follow a  file name  by a  list of  ranges of  pages that  you want
listed.  The list must be parenthesized.  For example:

SPOOL FOO.SAI (1,7,5:8)

will cause page  1, page 7,  and pages 5 through  8 inclusive to  be listed.
Page ranges are never sticky.

In octal dump mode, this page range list is used to specify a word  range to
list.
                      SPOOL: Multiple Copies of a File


The  REPEAT switch  (/REPEAT=n)  is accepted  by  SPOOL.  The  effect  is to
interpret n as a  decimal number and to list  that many copies of  the file.
Multiple copies are spooled as  usual, except that the two pages  of heading
that normally  precede a file  (except if the  /NOTITLE switch is  used) are
suppressed on the second and subsequent copies of the file.

Multiple copies and the /REPEAT switch are not allowed with spooling  on the
XGP (XSPOOL).
                       SPOOL: XSPOOL Special Features


The  XSPOOL command  is quite  similar to  the SPOOL  command.  The  XGP has
greater  flexibility  than  the  line printer,  so  more  parameters  can be
specified in the XSPOOL command.

The following switches are legal only in the XSPOOL command:

  FONT#n=f n is a number from 0 to 15 decimal.  f is a file  name.  The
           XGP  spooler  will use  the  font  named f  as  font  n when
           spooling.  If #n is omitted, n=0 is assumed.  Up to  16 font
           select switches are  permitted.  The defaults  for filename,
           extension, and PPN are FIX25.FNT[XGP,SYS].
  LMAR=n   Set  left  margin  to  column n.   Columns  in  the  XGP are
           numbered from 0 to 1699 (approximately).  The left margin is
           the column which the carriage return character selects.
  RMAR=n   Set right margin to column n.  If the XGP is going  to write
           a character  that exceeds  this margin, a  new line  will be
           started.
  TMAR=n   Set the number of blank  scan lines between the top  edge of
           the page and the first line of text.
  BMAR=n   Set the number of blank scan lines between the bottom of the
           text  and  the  bottom  edge  of  the  paper.   (The monitor
           interprets BMAR=0 to mean no paper cutting.)
  PMAR=n   Set the  number of  scan lines  in the  page body.   Text is
           written inside this area.  (The monitor interprets PMAR=0 to
           mean that the end of a page body is signalled only by a form
           feed in the file,  for variable-length pages.  This  is true
           only if BMAR≠0.)
  XGP      The  first page  of the  file is  taken as  font  and margin
           commands, preceded by slashes as in the command  line.  Only
           the special  XGP spooler switches  (the ones in  this table)
           are allowed.   Carriage returns are  ignored.  If  the first
           page of the file is an E directory, the second page  is used
           for the commands.  The command page is not printed.   A file
           extension of .XGP also invokes this feature.
  NOXGP    Turns off /XGP.
  XLINE=n  Set the minimum interline spacing to n scan lines.
  NTNODE=n Set the number of  text nodes allocated by the  monitor (see
           below).
  NVNODE=n Set the number of vector nodes allocated.

Text nodes and vector nodes are units of core storage allocation used by the
monitor's XGP service routines.   Generally, you need not worry  about them,
but if you have trouble  printing a complex document the  allocation control
switches may be able to help you.  See a system wizard to find out.

The /XGP switch, when present, turns off the usual default assumptions about
other  switches;  in  particular,  /HEADING  is  not  assumed  unless  it is
explicitly used.  Spooling a file  with extension .XGP implies a  default of
/NONUMBER as well as /XGP.

More peculiarities:

If  any FONT  select switch  specifies  some font  number other  than  0, no
/HEADING switch will be assumed unless it is explicit.

Page headings will occur in font#0.  Whatever font was in effect  before the
heading line  will be  reinvoked before any  further processing.   The title
page, if present, will be made in font#0.
                           SPOOL: QSPOOL Command


The QSPOOL command starts the SPOOL program in a special way.   QSPOOL reads
the directory of  [SPL,SYS] and interprets the  contents of the SPX  and XSP
(spooler command) files.  Essentially, it displays the queue of files  to be
printed.

The commands QSPOOL/LPT and QSPOOL/XGP will list spool requests only for the
indicated device.

The queue is based on a priority scheme.  The priority of a spool request is
determined by:

  (time in minutes since spool request, +1) / (file size in records)

Requests are processed in the order of decreasing priority.

The QSPOOL command may be given without logging in.
                           SPOOL: UNSPOOL Command


UNSPOOL is a monitor level  command that invokes the program SPOOL.   If you
run UNSPOOL, it  will display all the  spooler requests that you  (your PPN)
have requested, and it will allow you to delete any of them.  If  you delete
a  request which  hasn't  been seen  by  the spooler,  then  nothing special
happens since the spooler  is not yet aware of  the command, so it  won't be
missed.  If it happens that the spooler is already processing your commands,
then the listing in progress will be purged.

If you give the command REENTER  after UNSPOOL exits, then not only  are you
allowed to purge any command file that is either in progress or  pending but
you also can change the spooler behavior in the following ways:

1. You can cause the present listing to be purged.
2. You can cause the present listing to be started over.
3. You can cause the  spooler to hold the queue  and release the LPT  or XGP
   immediately before starting the next file.
4. You can release the queue from the state induced by holding it.

The commands UNSPOOL/LPT and UNSPOOL/XGP will list and delete spool requests
only for the indicated device.
                              APPENDIX 4--MAIL


The information in this appendix is taken from the files MAIL.BH[UP,DOC] and
RCV.BH[UP,DOC],  the  manuals  for  the MAIL  and  RCV  programs.   See also
E.ALS[UP,DOC] on the use of E in reading mail files and sending messages.
                           MAIL: The MAIL program


The  MAIL  program  is used  to  send  messages to  users  and  sometimes to
arbitrary disk files for special purposes.  The program is invoked by one of
several monitor commands, depending on the function desired:

  MAIL     send a message to one or more message files
  SEND     send a message to the terminals of one or more users
  GRIPE    send a message complaining about a system problem
  REMIND   schedule a message to be sent at some later time
  PLAN     create a file describing how to find you when not logged in
  EVENT    send a message to all users about an event on a given date
  BATCH    schedule the execution of a command string at some later time
  LATER    schedule the execution of a given program at some later time
  RETRY    send any messages which were queued by earlier failing operations

The commands MAIL, SEND, and GRIPE may be given when not logged in,  so that
people  who  are  not  authorized  users  of  our  system  can  use  them to
communicate with  us.  A user  who is not  logged in will  be asked  for his
name, which will be included  in the header of the message.   However, users
who are  not logged  in may  not use wildcard  (send to  all users)  or ARPA
network destinations.

The  commands  MAIL,  SEND,  and  REMIND  require  a  list  of  destinations
(recipients of  the message).  All  of the commands  except LATER  and RETRY
require some message  text and also  can be modified  by the use  of certain
optional switches, either applied  globally (all destinations) or just  to a
particular destination.   The commands  REMIND, PLAN,  EVENT, and  BATCH all
require a date and/or  time which can be included  by itself or in  a global
/DATE or /TIME switch.  (Any  date given must appear before any  time given,
whether in switches or not.  See the section below on dates and times.)

LATER takes up to four  specific arguments which describe the program  to be
run and when it is to be run; these will be described on page 99.

RETRY takes no arguments at all; it merely looks for queued mail originating
from the current user and tries  once again to send each such  message (this
will be done automatically if RETRY is not used).

The normal command syntax includes all necessary information on one  or more
lines   without  prompting.    There  is   an  alternative   format,  called
hand-holding mode, in which  each piece of information required  is prompted
for separately.   Hand-holding mode  is more  verbose and  time-consuming to
use, but may be less confusing  to new users.  It is invoked by  typing just
the command of  interest without any arguments,  and will be described  in a
separate section.  What follows here assumes that the normal syntax is being
used.

Before explaining  the complete  range of  command options,  here are  a few
sample commands:

SEND BH Want to have dinner?

This is  a very  simple example  of a  command with  one destination  and no
option  switches.  It  types  the message  "Want  to have  dinner?"  on BH's
terminal if he  is logged in,  along with a  header indicating who  sent the
message.  If BH is not logged in, MAIL asks if the message should  be mailed
instead of sent.

MAIL/DIST @NL Language group meeting Tuesday at 3pm.

This command mails the message "Language group ..." to the mail files of the
users listed  in the file  NL.DIS or NL  or NL.DIS[P,DOC] (the  [P,DOC] file
directory contains lists of users by project group).  The first file in that
list which  exists is used.   The message will  include the  standard header
indicating who  sent the message  and when, and  also (because of  the /DIST
switch) a line indicating to whom the message is being sent.

REMIND/DATE=10-*-* . Rent due tomorrow

This command reminds  the user who isssued  the command (because of  the "."
destination meaning self) to pay the rent on the tenth day of each  month of
every year.   The reminder is  both mailed and  sent each time,  and expires
after 50 times.  (These are default conditions modifiable by switches.)
                            MAIL: Command Format


The command  format for all  MAIL commands except  LATER and RETRY  is shown
below.  The formats  for the LATER and  RETRY commands are explained  in the
sections on those commands beginning on page 98.

<command & global switches> <destinations & local switches> <message>

The <destinations & local switches> part only applies to the MAIL, SEND, and
REMIND command.  Destinations and destination lists will be described in the
next section.

The  message text  can be  provided  in any  of three  ways:  (1) a one-line
message can be included after the destinations on the command line and ended
with <CR>; (2) if no message specification is given on the command  line (or
the same line as the  last destination for a multi-line command),  MAIL asks
for a message to be  entered from the terminal, ending with  the end-of-file
character (<CONTROL><META><LF>  from a Stanford  display terminal  or Imlac,
<control>Z otherwise); (3) if the notation

@file.ext[prj,prg]

is used on the command line after the last destination, the message  text is
taken from the specified file.  If no extension is typed, the extension .TXT
is tried first, and then a blank extension.  To force the use of  a filename
with no extension, type the dot but no extension, for example:

@file.[prj,prg]

The file may contain an E  directory or SOS line numbers, which will  not be
included in the message.

If  something not  starting with  "@" follows  the destination  list  on the
command  line, it  is taken  as the  message text.   This  makes single-line
messages more  convenient to  enter.  If  you start  to enter  a single-line
message, and decide you need more  than one line after all, end  the command
line with  <LF> instead  of <CR>  and you  will be  allowed to  continue the
message on later lines.

When entering a  message, the usual  line editing facilities  are available.
In addition, if the <bs> key is typed when the input line is empty (i.e., at
the beginning of a  new line), the last line  typed is loaded into  the line
editor (Stanford displays) or input buffer (non-displays) and the  cursor is
positioned at the end of that  line.  The text of that line is  deleted from
the  accumulated message.   The  effect is  that  a carriage  return  can be
deleted  by <bs>  like an  ordinary character.   It is  possible to  back up
another line by doing another  <bs> after clearing the newly  reloaded line.
This procedure destroys  the lines that followed  the one to which  you back
up, and the backup is only possible for a small (about 30) number of lines.

When entering a message from a Stanford display terminal, a  better facility
is available  for correcting errors  in the command  or in the  message more
than one line before the  current line.  Typing <CONTROL><META>E at  the end
of a line of message text will cause a file called MAIL.TXT to be written on
your login disk area (not alias) with the command, switches, and destination
list  that  you  gave   on  page  1,  and   the  message  text  up   to  the
<CONTROL><META>E on  page 2.  Then  E is run  automatically on this  file to
allow you to edit the text and/or command.  E will start up pointing at page
2 of the  file, but you  can modify the  command or destinations  by editing
page 1 (there will be no directory page).  When you are finished editing the
message and command, type to E the command <CONTROL>XRUN to restart the MAIL
program automatically and send the message as edited.  The MAIL.TXT  file is
automatically deleted after the message is sent.  Note: if  you accidentally
or purposefully exit from E without saying <CONTROL>XRUN, you can still send
the message from MAIL.TXT  by simply editing that  file with E (using  /R if
you don't need to further edit the message or command) and then giving E the
command <CONTROL>XRSYS MAIL,  which will  run MAIL to  send the  message and
delete the file.

The character  <altmode> cannot appear  in a message  (because it is  a line
editor  activator  and would  confuse  some mail-reading  programs).   If an
altmode is seen in  the message text as input,  it is changed into  a dollar
sign  ($).   Also,  the  character <formfeed>  cannot  appear  in  a message
(because it would  mess up the  E-format of mail  files).  If a  formfeed is
seen in the message text as  input, it is changed into an  exclamation point
(!).

If the  /SUBJECT switch is  used to  include a subject  line in  the message
header, the subject is taken from  the first text line entered: for  a file,
the  first line  of  the file  is the  subject;  what would  otherwise  be a
single-line message is taken as the subject line for a multi-line message to
follow.  If no message is provided on the command line, you are prompted for
a subject line and then for the message text.
                  MAIL: Destinations and Destination Lists


The  commands MAIL,  SEND, and  REMIND require  one or  more  recipients, or
destinations,  specified  in  a  list  called  the  destination  list.   The
destinations should be separated by  commas.  The list may extend  over more
than one line if the lines before the last end with comma.   (Any characters
from  a semicolon  to the  following linefeed  are ignored.)   The following
types of destinations may be used:

  prg                programmer name of local user
  .                  yourself
  *                  notice for all users
  name               real name (or leading substring) of local user
  name % host        user at another ARPA network host
  % host             sticky ARPA network host to be used for following names
  #fil.ext[pj,pg]    (MAIL only) arbitrary file to receive message
  TTYn               (SEND only) terminal to receive message
  n                  (SEND only) job number to receive message
  @fil.ext[pj,pg]    file containing destination list
  ARPA*              (SEND only) all users logged in via ARPA network

The form "prg" in  the above list must be  one to three letters  and digits,
the  first  of  which  is  a  letter  (upper  and  lower  case  letters  are
equivalent).  The forms "name" in the above list must consist of  either any
number  of letters,  digits,  and hyphens,  starting  with a  letter,  or of
arbitrary  characters  enclosed  in quotation  marks  ("...")  or downarrows
(↓...↓).  In the SEND command, the TTYn form may optionally be followed by a
colon.

ARPA network hosts are specified by host name (1 to 12 letters,  digits, and
hyphens starting with a letter) or by decimal host number.  If the host name
is used it can be abbreviated by enough characters to identify  it uniquely.
Many  hosts  have short  nicknames  recognized by  the  network  programs at
Stanford.  Mail will only be sent to a host specified by name if the host is
listed in our host table as a server (that is, a host which accepts incoming
connections).

A host  may be  specified for  a single  destination, using  the "name%host"
notation, or a sticky host may be specified by just "%host".  A  sticky host
will  apply  (until  another  sticky host  is  specified)  to  all following
destinations that start with a letter or a quote character and which  do not
have a host specification themselves.   A host name of SU-AI (or  SAIL) will
override a sticky host but will  not actually send the message via  the ARPA
network.

There is no ARPA network standard protocol for implementing the SEND command
to a  remote host.  However,  a private protocol  for this purpose  has been
implemented  for use  between SAIL  and the  ITS systems  at MIT.   The MAIL
program will attempt to use this protocol to any host, but it isn't going to
work except to an ITS.  In particular, the designers of TENEX object to SEND
on principle, because they  don't know display terminals have  been invented
yet.

More information about ARPA network mail will be given in a later section.

In the #file  construction, if no extension  is given the  default extension
of .MSG is used.   To mail to  a file with no  extension, you must  type the
filename in the form "#file." with no extension after the dot.

In the @file  construction, if no extension  is given the  default extension
of .DIS (distribution list)  is tried first.  If  that file does  not exist,
then the null extension is tried  next (both of these on your  current alias
disk area  unless you gave  an explicit PPN).   If neither of  these exists,
then the extension  and disk area .DIS[P,DOC] is  tried (unless you  gave an
explicit PPN).   The [P,DOC] directory  contains several  distribution lists
derived from the laboratory personnel directory.  For example,

SEND @VB Time for volleyball!

will send that message to all known volleyball players as listed in the file
VB.DIS[P,DOC] (see LES  to be added to  the list).  Distribution  list files
may contain E directories or SOS line numbers.  Only the first  page (second
page if in E format) is  read.  Everything on that page will  be interpreted
as destinations even  if not properly  separated by commas.   (The semicolon
format for comments will work.)

For the MAIL command, if there is a file called OUTGO.MSG in your login (not
alias)  directory, it  is automatically  included as  a destination  for the
message.  This provides a simple  and automatic method for saving a  copy of
each message you MAIL to anyone.

MAIL  cannot  be sent  to  local users  who  do not  have  file directories.
However, if you must  MAIL a message to a  programmer name that has  no file
directories, you can do

MAIL #"   prg".MSG[2,2]

to mail explicitly to the message file of programmer name "prg"  (prg should
be right-justified in six quoted spaces).

The check for syntax validity and  existence of local users is made  as soon
as the destination list  is read.  If some  but not all of  the destinations
are valid, MAIL asks whether or not it should proceed using the  valid ones.
If you want to correct a mistake in a destination (or in a switch or in some
part of the message already typed) before sending the message, answer  no to
the query  and then use  the monitor command  REENTER, as explained  on page
101.

For the SEND command with  a multi-line message (so the destination  list is
read before the message has been entered), a warning message is given if any
programmer name recipient is not  logged in.  This warning does  not require
reconfirmation before the command is executed.

For people who want to send mail to people listed in a file designed for use
by SNDMSG  at a  TENEX site, which  requires a  different syntax,  the /ARPA
switch  can  be  used  to  cause  distribution  list  files  to   be  parsed
differently,  including the  use of  "@" to  indicate a  network  host name.
Obviously nesting of distribution list  files is not possible within  such a
file.  See the description of the /ARPA switch below for more details.
                           MAIL: Message Formats


Messages are  usually sent preceded  with a special  header which  tells who
sent the message and when it  was sent.  This header takes three  forms: one
for messages being typed out on terminals (SEND command), another  for local
(SU-AI) mail files, and a third for messages sent out over the ARPA network.
The  header may  be  followed by  an optional  distribution  list (explained
below).  After the distribution list (if present), the message text  is sent
followed  by a  blank line  (unless the  message already  ends with  a blank
line).  SEND  leaves off  the extra blank  line when  typing the  message on
terminals.

The header  used for local  files starts with  a partial sign  to facilitate
detection  of  the beginning  of  each message  by  various  message editing
programs.  To ensure that trouble is not caused when a partial sign actually
occurs in a message, any partial sign that occurs as the first  character in
any line of a message is  indented by one space, whether or not  the message
is going only to local files.

Here are examples of the first two header formats:

;; Message from ME   at TTY46  0032     Records

∂23-DEC-75  0032        ME      Records

The  SEND  header  (first  above)  contains  the  sender's  programmer name,
terminal number, the 24-hour time of sending, and then the subject (if any).

The local file header (second above) contains a partial sign followed by the
date and the time of day, then the sender's programmer name and  the subject
(if any).  The local  file header can be  suppressed by use of  the /-HEADER
switch (see  the section on  switches below).  However,  this switch  is not
recommended for general  use when mailing to  users' message files  since it
causes the message to be  sent without any identification about who  sent it
or  when it  was sent;  in fact,  it effectively  causes the  message  to be
appended to some other message in the file.  This switch is useful, however,
when mailing text to a special file which is simply to contain message text.

In both the SEND header and the local file header, if the sender  was logged
in via the ARPA network at  the time of sending, the phrase  "via host" will
follow the sender's  programmer name, where "host"  is the name of  the host
from which  the sender was  connected to Stanford.   The name  preceding the
"via ..." is, nevertheless, a Stanford programmer name.

If the sender is not logged in,  his programmer name is 100 and he  is asked
to supply his real name, which is included in the header.

If the message was sent to all users by a SEND * command, a "to *" phrase is
added to the header line to make it look like this:

;;Message to * from ME   at TTY46  0032 Records

Finally,  if  the  message if  being  sent  as a  reminder  (see  the REMIND
command), then  the programmer  name in the  header will  be followed  by an
asterisk (*) as in these examples:

;; Message from ME*  at TTY46  0032     Records

∂23-DEC-75  0032        ME*     Records


Now, here is a sample header for messages sent out over the ARPA network:

Date: 23 DEC 1975 0032-PST
From: Martin Frost (ME @ SU-AI)
Subject: Records
To:   rmf @ MIT-ML

The network  header contains the  date and time,  the sender's real  name as
well as his programmer name, the subject (if any), and the distribution list
(list of recipients of the  message, starting "To:").  This is more  or less
the  standard  ARPA  network  format, except  for  the  "From:"  line, which
contains the  sender's real name  as well as  his network mailbox.   The MSG
program on TENEX, which uses the "From:" line to provide an  automatic reply
feature, knows about this format  and handles it correctly.  There is  a new
mail header standard in the  works, which calls for lots of  useless garbage
like a supposedly-guaranteed-unique message ID line to help  the bureaucrats
or the CIA or someone like  that keep track of the message; we  don't supply
that.

The distribution list can be omitted from network mail by use of the /NODIST
switch (see  the section  on switches below)  and can  be included  in local
messages  (MAIL or  SEND) by  use of  the /DIST  switch.  Note  that /NODIST
applies only  to network  messages and  /DIST only  to local  messages.  For
messages  MAILed to  two  or more  destinations,  a global  /DIST  switch is
assumed unless a global /-DIST  switch is given.  The distribution  list may
use more than one line  if lots of destinations were specified.   Also, some
destinations may be listed on  lines beginning "CC:" instead of  "To:"; such
destinations  are considered  secondary recipients  of the  message  and are
specified by use of the /CC switch.

Normally, if a distribution list file was used to specify the  recipients of
the message, a distribution list included with the message will contain only
the name of that file, not the actual recipients listed in it, to avoid very
long  distribution lists.   The /LIST  switch (see  the section  on switches
below) will list in the message the individual recipients named in the file.
                         MAIL: Message File Formats


When mail is sent to a file which already exists, the beginning of  the file
is read to see if it contains  an E directory.  If so, the message  is added
at the end of the file preceded by a formfeed so that the message will be on
a new page.  The directory is not updated to reflect this new page,  but the
formfeed will be at a record boundary, so that when the file is  next edited
with E, the directory can be updated without reformatting the file.   If the
file does not already  contain an E directory,  the message is added  at the
beginning of the file without any formfeed.  In this case, record boundaries
are not necessarily preserved.  The /APPEND switch will cause the message to
be added at the end of the file along with a formfeed as if there had been a
directory.  The /-HEADER switch which omits the local mail header also omits
the formfeed which would have just preceded the header in E format files.

When a message is sent to a  file which did not formerly exist, the  file is
created with  an initial  E directory  so that  subsequent messages  will be
added at  the end  of the file.   The switch  /-E can be  used to  omit this
directory normally inserted  for a new file.   However, this switch  and its
inverse /E will be ignored for user message files (*.MSG[2,2]) and  for user
plan files (*.PLN[2,2]).  New user message files always get an  E directory;
user plan files never do.
                           MAIL: Command Switches


Various  switches  can  be  specified in  the  command  line  to  modify the
operation of the MAIL program.   Some apply only globally; these  may appear
either  just after  the  command name  or after  an  individual destination.
Other switches can be applied  either globally (by appearing just  after the
command name) or to a  particular destination (by appearing just  after that
destination).   A switch  applied to  a particular  destination  overrides a
global switch.  Switches may appear at the beginning of a  distribution list
file, in  which case  they apply  globally to  all destinations  within that
file.   Switches  appearing  with  the  @file  destination  format  override
file-global switches at the beginning of the file.

A switch name may be abbreviated by enough characters to identify the switch
uniquely.  All switches are available in positive and negative senses (e.g.,
/LIST and /-LIST) except for the following switches which are  not available
in the negative  sense: /CC, /DATE, /TIME,  /COUNT, and /ARPA.   The default
value for  most switches with  a negative sense  is the negative  sense; the
/HEADER and  /E switches  are the  primary exceptions,  but in  addition the
/SUBJECT and /DIST switches can be implied by the command.

Here are the available switches:

  Switch   Meaning of positive switch sense

  /NOMAIL  (SEND only) Do not mail the message to a destination programmer
           name if  the user  is not logged  in.  Suppresses  the question
           about such mailing.

  /YESMAIL (SEND  only) Do mail  the message  to a  destination programmer
           name if  the user  is not logged  in.  Suppresses  the question
           about such mailing.

  /MAIL    (SEND only) Mail the  message to a destination  programmer name
           as well as sending even  if the user is logged  in.  Suppresses
           the  question about  mailing of  SEND messages  which  would be
           asked  if a  destination programmer  name were  not  logged in.
           (Note that this switch  has a different meaning for  the REMIND
           command--see below.)

  /MAIL    (REMIND  only) Do  not  send the  reminder  to  the destination
           programmer name  when the time  comes, only mail  it.  Normally
           reminders are both mailed and sent.  (Note that this switch has
           a different meaning for the SEND command--see above.)

  /SEND    (REMIND  only) Do  not  mail the  reminder  to  the destination
           programmer name  when the time  comes, only send  it.  Normally
           reminders are both mailed and sent.

  /DIST    Include the list of destinations in the text of the message for
           local recipients (see message format in a previous section).  A
           global /DIST is  implied by the MAIL  command when two  or more
           destinations  are given  unless a  global /-DIST  is specified.
           Compare /NODIST below.

  /NODIST  Do not  include the  list of  destinations in  the text  of the
           message  for  ARPA  net recipients  (see  message  format  in a
           previous section).  This switch is not the inverse of /DIST!

  /NO      This  is equivalent  to  /NOMAIL for  the SEND  command  and to
           /NODIST  for  the MAIL  command,  so  that /N  can  be  used to
           abbreviate the appropriate switch.

  /CC      List  this  destination  and all  after  it  as  secondary (CC)
           recipients (see  message format in  a previous  section).  This
           switch implies /DIST unless a global /-DIST is given.

  /SUBJECT Include  a subject  line in  the message.   The effect  of this
           switch is always global.   /SUBJECT is implied by the  MAIL and
           GRIPE  commands unless  some  message text  or the  name  of an
           indirect message  file or the  /-SUBJECT switch appears  on the
           command  line.  However,  typing  just <CR>  to  the "Subject:"
           prompt will  omit the subject  from the message.   Subjects are
           useful in local mail files because the first line of  each page
           (usually the header line of a message) appears on the directory
           page in an  E-format file, and for  local files the  subject is
           included in the header line and thus in the directory.

  /WHERE   (MAIL and  SEND only) Type  the WHO  line of  each job  that is
           logged in under a programmer name included in the destinations.

  /QUEUE   Queue ARPA network mail for later delivery without first trying
           to send it immediately.   This can be especially useful  if you
           are sending  a message  to several different  hosts and  do not
           want to wait for completion of the mail to each one.  The first
           attempt (by  the remind phantom)  to send such  manually queued
           mail will happen right away.

  /APPEND  (MAIL only) Put the message at  the end of the file  instead of
           the beginning  even if  it has no  directory.  A  formfeed will
           precede the message (unless /-HEADER was given).

  /LIST    List the destinations specified within a distribution list file
           as well as  the file itself  in any distribution  list included
           with the message.  For REMIND, /LIST implies /EXPAND.

  /HEADER  Include the header line in messages mailed to local files.  See
           message formats in  a previous section.  Unlike  most switches,
           the default for this switch is on.

  /E       Include an  E directory  if creating a  new message  file.  The
           default for this switch, like that for /HEADER, is on.  See the
           section above on message file formats.

  /DATE    (REMIND, PLAN,  EVENT, and BATCH  only) This switch is  used in
           the form /DATE=<date> and sets either (1) the delivery date for
           a  reminder,  (2) the  expiration  date  for  a  plan,  (3) the
           occurrence date of  an event, or  (4) the execution date  for a
           batched  command   sequence.   Reminders,  events,   and  batch
           executions can also be  given a time (see /TIME  switch below),
           but any  date must be  specified before any  time is.   For the
           <date> formats  accepted, see  the section  below on  dates and
           times.

  /TIME    (REMIND, EVENT, and BATCH only) This switch is used in the form
           /TIME=<time>  and  sets  either  (1) the  delivery  time  for a
           reminder,  (2) the  occurrence  time of  an  event,  or (3) the
           execution time for  a batched command sequence.   Reminders and
           batched executions can also be given a date, and events must be
           given a date; see the  /DATE switch above.  If /DATE  and /TIME
           are both used, /DATE  must come first.  For the  <time> formats
           accepted, see the section below on dates and times.

  /COUNT   (REMIND  and  BATCH  only) This  switch  is  used  in  the form
           /COUNT=<number> and sets the expiration count for a reminder or
           a batched command sequence.  This count is only relevant if the
           command contains  a wildcard  date.  See  the section  below on
           dates and times.

  /EXPAND  (REMIND only) This switch  applies only to destinations  of the
           form  @file.  It  causes such  a distribution  list file  to be
           expanded now  instead of  when the  reminder is  actually sent.
           This  means that  there will  actually be  a  separately stored
           reminder for each destination now contained in the distribution
           list file rather than one reminder that actually references the
           file when the reminder is being sent.  This switch applies only
           to the file  itself (not to  any @file destinations  within the
           file), unless the switch is given globally or file-globally, in
           which case it propagates downward.  /-EXPAND implies /-LIST.

  /ARPA    This switch  may only be  used with a  destination of  the form
           @file or as  a file-global switch  in such a  distribution list
           file.  It  changes the syntax  of the destination  processor so
           that  the  character "@"  precedes  an ARPA  network  host name
           instead  of  a  distribution list  file  name,  and  all SIXBIT
           characters except space,  comma, colon, quote ("),  and at-sign
           (@) are allowed in  names without using quotes.  A  name ending
           with a  colon (distribution list  name for SNDMSG)  is ignored.
           The switch is intended  for files from systems like  TENEX with
           less sophisticated mail programs.
                           MAIL: Dates and Times


The commands  REMIND, PLAN,  EVENT, BATCH,  and LATER  all accept  dates and
(except  for PLAN)  times.  The  date  and/or time  given for  one  of these
commands specifies when  a particular thing  should happen: REMIND  causes a
reminder message to be  mailed and or sent to  one or more users at  a given
instant;  PLAN creates  a plan  file  for the  user giving  the  command and
specifies the date on which  the plan file should automatically  be deleted;
EVENT puts  out a  system message  announcing an  event of  general interest
which  will  take place  at  the specified  time  and date;  BATCH  causes a
sequence of  commands to  be executed at  the specified  time and  date; and
LATER causes a given program to be run at the specified time and  date.  For
all of these commands except LATER,  there are two ways to provide  the date
and time information.

The less confusing manner of giving dates and times is to use one or both of
the switches /DATE=date and /TIME=time  after the command name (if  both are
used, /DATE must precede /TIME).  These switches may only  occur immediately
after the command name.  (Switches are not permitted with the LATER command,
which  takes a  fixed one-line  format that  will be  explained on  page 99.
Dates and times  in the LATER command  must use the non-switch  format.)  If
neither switch is used in a command  that needs a date or time, then  a date
and/or a  time will be  expected after the  destination list (which  is only
present for REMIND) and before the message text.

Dates may be given  in any of the  following formats (whether in  the switch
form or not):

          4/28/75         28-APR-75       APR 28, 75
          4/28/1975       28-APR-1975     APR 28, 1975
          4/28            28-APR          APR 28
          4/28/*          28-APR-*        APR 28, *
          */28/*          28-*-*          +3
          WEDNESDAY       WED             W
          WEDNESDAY*      WED*            W*

(Visitors from Europe please  note that the slash format  is month/day/year,
not day/month/year!)

If a specific month and day are given but no year, the current year  will be
used unless the date  has already passed, in  which case next year  is used.
Today's date  is considered  as already  having passed  except in  the EVENT
command.  Months and days of the week may be indicated by as many letters as
are  required to  identify the  name uniquely.   For days  of the  week, the
one-letter  abbreviations M T W R F S D  are provided.   The format  "+3" is
used  to indicate  a date  of 3  days from  today.  The  asterisks represent
wildcard dates which  are explained in the  section below on  wildcard dates
and expiration counts.

Times may be given  in any of the  following formats (whether in  the switch
form or not):

          1423            223pm           223p            02:23p
          14:23           2:23PM          2:23P           02:23PM
          0223            223am           223a            223
          02:23           2:23AM          2:23A           2:23
          2               2AM             2PM             14
          +2:23           +2:             +:23            +14:
          2*              2AM*            2:23*           2A*

If an explicit  AM or PM is  given, it must follow  the time number  with no
intervening spaces!  This requirement is necessary to distinguish the  AM or
PM from the possible beginning of the message text or of a destination name.
Times with three or four digits and no colon normally imply AM if  less than
1200 and PM otherwise (the allowable range is 0000-2359); it is  possible to
specify  AM  or  PM explicitly,  however,  if  the number  is  in  the range
0100-1259.  If no explicit date is  given in the command, times with  one or
two digits, or with a colon, and in the 1:00-12:59 range without an explicit
AM or PM,  will represent the  nearest such 12-hour  time which has  not yet
passed (which might be  this morning, this afternoon, or  tomorrow morning).
If a date  is given as well  as a time, times  in the 0:00-11:59  range will
normally be considered AM and  12:00-23:59 will be considered PM as  for the
four-digit times.  Note: A time of 12:00am is midnight, and 12:00pm is noon;
the mnemonic is that 12:00 is a minute before 12:01.

If a time is given but no  date, today's date is used unless the  given time
has already passed,  in which case  tomorrow's date is  used.  If a  date is
given but no time, the time  used is midnight at the beginning of  the given
date.

The relative time format (e.g.,  +2:23) specifies the length of  time before
the command is  to be executed  (in this example,  2 hours and  23 minutes);
this format may only be used if  no date is given and, except in  the switch
form, must contain  a colon so  that +2 days  can be distinguished  from +2:
hours.

A time  followed by  an asterisk represents  the given  time and  a wildcard
date; see the section below on wildcard dates and expiration counts.
                 MAIL: Wildcard Dates and Expiration Counts


As demonstrated in the example dates and times above, an asterisk (*) can be
used as a wildcard in place of the month or year, or following a day  of the
week or  a time.   Such dates  and times  cause the  command to  be executed
repeatedly  until exhaustion  of the  expiration count,  which  is explained
below.  (Wildcard dates are not permitted in the PLAN and  EVENT commands.) 
An asterisk used in place of the month will cause the command to be repeated
once every  month, and  an asterisk  used in  place of  the year  will cause
yearly repetition; asterisks used for both the month and the year will cause
monthly repetition every  year on the given  day of the month.   An asterisk
following a day of the week will cause weekly repetition on the given day of
the week.  An asterisk following  a time will cause daily repetition  at the
given time; in this format no date can be given.

If * is used for the month but not for the year, the command will  expire at
the  end of  the specfied  year, or  the current  calendar year  if  none is
specified.

When a wildcard  date is used, the  command is repeated until  exhaustion of
the expiration count.  The expiration  count can be set explicitly  by using
the  /COUNT=n  switch  (global only)  or  by  following  a non-switch-format
date/time with #n, where n is  a decimal number.  If no expiration  count is
given, the  default of  50 is  used.  A  count of  0 or  ∞ will  prevent the
command from expiring unless it is explicitly cancelled by the user.
                   MAIL: Mail to Other ARPA Network Hosts


Mail can be sent  to users of other  computer systems connected to  the ARPA
network.  To send network mail, you  must tell the MAIL program the  name of
the recipient, as understood  by the other host,  and the name of  the host.
Each host has  an official name, a  string of letters, digits,  and hyphens.
For  example,  our host  name  is  SU-AI.  Hosts  may  also  have unofficial
nicknames; we assign a short name to every host on the network.   Either the
official name or the nickname can be used to identify a host; you  need only
type enough characters to identify the host uniquely.  For example,  we have
the nickname SAIL  which can (as of  this writing) be abbreviated  SA.  Each
host also  has a number;  you can type  a decimal host  number instead  of a
name.  The format for a network destination is

        name % host

where "name" is the recipient's name at the host and "host" is the host name
or number.   The recipient name  can contain upper  and lower  case letters,
digits, and hyphens; if any  other characters are required the name  must be
enclosed in quotation  marks ("...") or  downarrows (↓...↓).  The  name must
also be quoted if it does not start with a letter.  Some hosts  may consider
the case of letters significant in their user names.

To send  a message  to several  users at the  same host,  it is  possible to
specify a sticky host with a pseudo-destination of the form

        % host

Thus, the command

        MAIL FEINLER%BBNB,%AI KLH,TK,MINSKY,BH%SAIL,PAPERT

will mail the message to these recipients:

        FEINLER at host BBN-TENEXB
        KLH at host MIT-AI
        TK at host MIT-AI
        MINSKY at host MIT-AI
        BH at host SU-AI
        PAPERT at host MIT-AI

Of course, mail  to SU-AI is  not actually sent  via the ARPA  network!  The
sticky  host specifier  "%AI" was  not followed  by a  comma in  the example
above;  the comma  is optional  following sticky  hosts since  the use  of a
sticky host implies that at least one destination will follow.

Not all network hosts are servers; that is, some hosts can originate network
connections  but do  not accept  connections originated  from  another host.
Mail can only be sent to servers, and the MAIL program will refuse to try to
mail to a  host which is not  known to be a  server.  We are supposed  to be
notified promptly of host status changes, so our host tables should be up to
date most of the  time, but if MAIL does  not recognize a host you  think it
should,  consult  a  system  programmer.   MAIL  will  always  accept  hosts
specified by number.

Network mail may not be delivered successfully on the first try, because the
other host or the network communications equipment may be  down.  Therefore,
the result of a network mail attempt is reported with one of three messages:

        USER at HOST -- ok
        USER at HOST -- refused
        USER at HOST -- queued

The first message means that the mail was sent and acknowledged by the other
host.  The second means that the network connection was established  but the
other host rejected the mail, for example, because it did not  recognize the
recipient as a user of that system.  Usually the other host will send back a
message explaining why  the mail was refused,  which the MAIL  program types
out.  The third message means that the network connection could not  be made
or  was  interrupted.   The  message  is  queued  like  a  reminder  and  is
automatically retried  at three-hour intervals  for three days.   (The first
repeat attempt is made 15 minutes after the original failure.)  You  can use
the  RETRY command  (see the  section on  the RETRY  command) to  retry your
queued  mail  manually.  You  will  be notified  via  MAIL and  SEND  of the
eventual disposition of queued mail; the possibilities are

        Mail to USER at HOST -- ok
        Mail to USER at HOST -- refused
        Mail to USER at HOST -- expired

The  last  of  these  means  that the  three-day  limit  ran  out  without a
successful connection.

When a message which was typed  in from the terminal (not read from  a file)
is queued, the message  text is also written  in a file named  FAILED.TXT in
your  login (not  alias)  directory.  This  file  is not  necessary  for the
operation of the queuing system, but can be used if you want to redirect the
message.  (For example, you might know that the recipient is also accessible
through another host.)

Also, you can selectively delete  queued mail requests by using  the monitor
command CANCEL (see page 104).

The header  format for network  mail is different  from that used  for local
mail.  The section of this document on message formats explains  the network
header.  In  particular, the  distribution list (list  of recipients  of the
message) is  by default included  in network mail  but not local  mail.  The
/NODIST switch will eliminate the list from network mail.

If you often  communicate with users  at other hosts,  you may want  to send
mail to a group of people listed in a file which was prepared elsewhere.  To
make  this  easier,  the   switch  /ARPA  applied  to   a  distribution-file
destination causes  the file to  be scanned using  the syntax of  the SNDMSG
program on TENEX systems.  Specifically:

    The character "@"  is used instead of  "%" to indicate  network host
    names.

    Any character may be used in a recipient name except space, carriage
    return,  linefeed, tab,  quote,  colon, comma,  and  at-sign without
    quoting  the name.   Note in  particular that  semicolon is  a valid
    recipient name character.

    A  recipient  name ending  with  colon (distribution  list  name) is
    ignored completely.

If you  are sending mail  to several users  at other hosts,  it can  be very
time-consuming to  wait for  all the  network connections  to be  made.  The
/QUEUE switch can  be used either globally  or for individual  recipients to
tell MAIL to queue the  message immediately, without trying to send  it.  In
this case, the first attempt will be made essentially immediately instead of
15 minutes later,  but the attempt will  be asynchronous with your  own job.
Note: during busy hours  there may be no  job slot available for  the remind
phantom, in which case  the mail will not  be sent immediately if  /QUEUE is
used.

There is no ARPA network standard protocol for implementing the SEND command
to a  remote host.  However,  a private protocol  for this purpose  has been
implemented  for use  between SAIL  and the  ITS systems  at MIT.   The MAIL
program will attempt to use this protocol to any host, but it isn't going to
work except to an ITS.
                           MAIL: The MAIL Command


The MAIL command  is used to send  a message to one  or more users,  but can
also be used  to write a  message in an  arbitrary disk file.   This command
takes a list  of destinations which determines  where the message is  to go.
See the section above on destination lists.

Mail sent to a user will be seen when he next reads his message file,  but a
note saying  that mail  has arrived  is typed  out on  the terminal  of each
destination user who is  logged in at the  time the mail is  delivered.  You
can edit your message  file with E by  giving the monitor command  ETV ∂ (or
ETV \MAIL).

A notice can  be mailed to the  system message file NOTICE.TXT[2,2]  via the
MAIL * command.  Users  see the system messages  when they log in.   Since a
system message may only be relevant for a short time, an expiration date can
be specified for  such a notice.  To  do this, use the  /DATE=<date> switch;
the message will be deleted at the midnight that begins the given  date, and
therefore the notice will last be  seen on the previous day.  The  date must
not be wild; that is, it cannot contain the asterisk (*) wildcard specifier.
System messages specified without  an expiration date will be  deleted after
14  days.   (The  expiration  facility  is  implemented  by   including  the
expiration date as its octal DAYCNT number in the message header.  A program
run every midnight deletes expired notices.)  See also the EVENT command for
putting notices about events in the system message file.

Sometimes mail  cannot be  delivered to a  given user  right away.   In this
case, the mail  system queues the message  for later delivery.   Attempts to
deliver queued  local mail will  be made every  ten minutes for  four hours,
with the  first such attempt  occurring about 2  minutes after  the original
failure.   Queued network  mail is  retried every  3 hours  for  three days,
starting 15 minutes after the original failure.  When the message is finally
delivered, or  after 24 delivery  failures, the sender  is notified  via the
mail system of the eventual outcome of his mail attempt.  Mail will  have to
be queued if  the destination user is  located at another ARPA  network host
and that  host is down,  or if the  destination user is  at Stanford  and is
currently reading his  mail file.  Queued  mail is handled  automatically by
the mail system and the sender need never take any further action.  However,
the sender can unqueue any  of his outgoing messages that have  been queued;
the monitor command  CANCEL allows selective  deletion of these  queued mail
requests (see page 104).  Also,  the sender can cause MAIL to  retry sending
his outgoing queued mail immediately  by giving the RETRY command  (see page
98).
                           MAIL: The SEND Command


The  SEND command  is  used to  have  a message  typed  out on  one  or more
terminals.  This is  usually for the purpose  of sending a brief  message to
the terminals of selected users  so that they will see it  immediately.  The
message is preceded by a header  telling who sent the message and  when; see
the  section  above  on  message formats.   This  command  takes  a  list of
destinations which determines where the  message is to go.  See  the section
above on destination lists.

A message can be  sent to all logged in  users via the SEND *  command.  The
message will be typed out on the terminal of every logged in user.

Also, the command SEND ARPA* will send a message to all users who are logged
in at Stanford via the ARPA network.

There is no ARPA network standard protocol for implementing the SEND command
to a  remote host.  However,  a private protocol  for this purpose  has been
implemented for  use between  SU-AI and the  ITS systems  at MIT.   The MAIL
program will attempt to use this protocol to any host, but it isn't going to
work except to an ITS.  When a  SEND fails to a remote host for  any reason,
the  message is  never  queued for  later delivery--its  delivery  is simply
aborted.
                          MAIL: The REMIND Command


The REMIND command allows  the delivery of a  message to be delayed  until a
particular date and time, and/or to be repeated periodically.   This command
requires a date and/or time, which are interpreted as explained above in the
section on dates and times.

Reminders are normally both mailed and sent at the specified date  and time.
However, either of the switches /MAIL and /SEND can be used with  the REMIND
command to cause the reminder to be only mailed or only sent.  Nevertheless,
if  a  repeated  reminder  is  being sent  for  the  last  time  because its
expiration count has run out, it is always mailed even if /SEND was  used in
the command.

When a repeated reminder's expiration  count runs out, a warning  message to
that effect is included in the text of the last reminder.

To selectively delete reminder requests, use the monitor command CANCEL (see
page 104).
                          MAIL: The GRIPE Command


Complaints, compliments, or criticisms about any aspects of the system or of
the A.I. Lab in general can be  entered in the general gripe file by  use of
the  GRIPE command.   This command  takes only  global switches  and message
text.  The  gripe file  can be  typed out  with the  system program  COPY by
giving the monitor command TYPE \GRIPES (which may currently  be abbreviated
TY\G).  This file can be examined and edited with the E editor by giving the
monitor command ETV \GRIPES (currently abbreviatable as ET\G).
                          MAIL: The EVENT Command


Messages of interest to everyone can  be sent to the system message  file by
use of the command MAIL *.  However, for a message about an  event occurring
on  a  particular day,  a  more useful  facility  is provided  by  the EVENT
command,  which  also  enters  the  message  in  the  system   message  file
NOTICE.TXT[2,2], but which does so several times: first on the day the EVENT
command is given, then again on the day before the event, and finally on the
day of  the event.  The  EVENT command takes  an explicit date  and optional
time in the formats explained in the section on dates and times.  EVENT will
then list the message given prefixed by a special line of the form:

        Event of DAY DD-MON-YY at HH:MMxm

where DAY is the day of the  week the event will occur on, DD-MON-YY  is the
day, month,  and year of  the event's  date, HH:MM is  the event's  time, if
given, and xm is either "am" or "pm" for the time.  Thus, the date  and time
need not be included in the message text itself.

On the day  before the event and  again on the day  of the event,  the event
notice will be deleted and re-entered in the notice file so that  users will
see it again on those days.  It is finally deleted at the midnight that ends
the day of the event.  If the event is on a Monday, the notice is re-entered
on the preceding Friday, Saturday, Sunday, and the Monday of the  event.  If
the event is on a Sunday, the notice is re-entered on Friday,  Saturday, and
the Sunday of the  event.  Events on other  days are just re-entered  on the
day before the event and the day of the event.  (The re-entering of upcoming
events is implemented by including  more than one expiration date  in DAYCNT
format in the message header.)

If you want to change  the text in an event  notice, you can do a  RCV * and
edit the message  text or time  of the event.  However,  if the date  of the
event is wrong, you should delete  the notice (with RCV) and make a  new one
(with EVENT) because the octal  dates in the header determine what  days the
message will be seen, and the header cannot be edited.
                           MAIL: The PLAN Command


The  PLAN  command  is used  to  create  or delete  a  file  describing your
whereabouts, office schedule, or whatever, to be read by users who  give the
FINGER command to  find you when  you are not  logged in.  The  PLAN command
writes a plan  file called "   PRG".PLN[2,2],  where PRG is  your programmer
name.  Any previous plan file is replaced with a new one containing only the
new message you give.  If you enter a null plan, your plan file  is deleted.
The plan applies to your login programmer name.

The PLAN command requires an  expiration date (but no time) as  explained in
the section  on dates  and times.   Your plan  file will  be deleted  at the
midnight  that  begins  the   expiration  date.   (Plan  file   deletion  is
implemented by  entering a LATER  request (see page  99) to run  the program
DELPLN, which will delete your  plan file.  You can selectively  delete this
LATER request by using the monitor command CANCEL--see page 104).

Your plan file  can be referenced  with the COPY  program by using  the \PLN
filehack.  For instance,  the monitor command  TYPE \PLN will type  out your
plan file, and  DELETE \PLN will delete  it.  Also, the  COPY/E message-file
specifier, partial-sign (∂),  can be used to  reference your own  or someone
else's  plan  file:  TYPE ∂.PLN  will  type  out  your  own  plan  file  and
TYPE ∂ME.PLN will type out the plan file belonging to programmer name ME.
                          MAIL: The RETRY Command


The RETRY command is used to retry all queued mail immediately.  It takes no
arguments at all in the  command line.  RETRY searches the remind  queue for
queued mail (not reminders) sent by your login programmer name and  tries to
send the mail.  (This will be done automatically without using  the command,
but the  command is  provided for  impatient mailers.)   Please do  not type
<call> or ↑C after giving this command, or you may lose a queued message.
                          MAIL: The LATER Command


The  REMIND command,  in essence,  allows the  execution of  a MAIL  or SEND
command to be  delayed to a specified  time.  The LATER  command generalizes
this delayed execution to allow  an arbitrary program (dump file) to  be run
at a later time.  The command format is:

        LATER dumpfile core datetime count

The LATER command does not accept switches and requires all of its arguments
to be on the command line.  If the proper syntax is not followed,  a message
is typed explaining the proper syntax and nothing else is done.

The  defaults  for  the  program  file  to  be  executed  are   device  DSK,
extension .DMP, and your alias PPN.  If a device is explicitly specified, it
must be DSK or  SYS.  No check is made  when the command is given  to ensure
that the specified file exists or is a valid program dump file.

The optional core argument can be used to control the core size and starting
address used to run the program.  If this argument is not used,  the program
will be run in as much core as  is needed to fit it, and will be  started at
its  normal starting  address.  The  core argument  can be  in any  of these
formats:

   <nK>   <+m>   <-m>   <nK,+m>   <nK,-m>   <+m,nK>   <-m,nK>

The angle brackets are actually  to be typed.  The nK  subargument specifies
the number of 1024-word blocks of core to be assigned to the program; n is a
decimal integer.   The +m or  -m subargument is  a starting  address offset,
that is, m will  be added to or  subtracted from the program's  normal start
address.  Note: m is an OCTAL integer.

The date and/or time must be given in the non-switch format as  explained in
the section on dates  and times.  If both a  date and a time are  given, the
date must appear first.

The optional count argument specifies the number of times the program  is to
be run and is ignored unless a wildcard date is used.  If no  explicit count
is given  when a  wildcard date  is used, the  default count  of 50  will be
assumed.  The format for the count field in the LATER command is

   #n

where n  is a decimal  integer.  A count  of #0 or  #∞ will cause  the count
never to run out.

When a program specified  by a LATER command  is actually run, it  will have
your login PPN as its login and alias PPNs.  The only privilege it will have
will  be the  Local User  Privilege (LUP).   Also, it  is run  as  a phantom
job--if it is stopped because of an error, the job is killed.

Certain  accumulators  (ACs) are  set  up  when the  program  is  started to
communicate information from the remind phantom to your program:

    AC   Contents

    1    filename of program dump file (same as job's name)
    2    extension of program dump file
    3    PPN of program dump file--[1,3] if device SYS was specified
    4    -1 if this LATER request will not be run again, else 0

The program can only be run if a job slot is available at the time for which
it is scheduled.  If the remind phantom is unable to run the program because
no job slots are available, it does not try again later (unless,  of course,
the date and time specify repetition).  If the system is so crowded that job
slots are in short supply, users  who are present in the flesh  get priority
over  LATER  requests.   This  is  rarely  a  problem  except   for  weekday
afternoons.  (If there is no job slot for the remind phantom itself, it will
try to run your request once, as soon as it is run itself.)

LATER  requests can  be  selectively deleted  by using  the  monitor command
CANCEL (see page 104).
                          MAIL: The BATCH Command


Sometimes  you  may want  to  delay the  execution  of one  or  more monitor
commands.  To  allow this, the  BATCH command accepts  a command  string and
enters  a request  to run  a  program which  enters the  commands  through a
pseudo-teletype (PTY).  The message given with the BATCH command is taken to
be the command or sequence of commands which is to be typed to the PTY.  The
only switches permitted are /DATE, /TIME, /COUNT, /NOW, and /DO.  The /COUNT
switch specifies the number of times the command sequence is to  be executed
and is  ignored unless  there is a  wildcard date.   The /NOW  switch causes
BATCH to execute the command sequence as soon as you have  finished entering
it instead of later;  in this case no date  or time must be given.   The /DO
switch  causes certain  character conversion  to be  done when  entering the
commands, as in the DO program and as explained below.

        Character       Effect in /DO mode

        RETURN          ignored
        LINE            ignored
        ↔               translated to RETURN followed by LINE
        ↓               translated to LINE
        ≠               translated to ALT
        λ               translated to deferred CALL (one ↑C)
        VT              adds CONTROL bit to following character
        α               adds CONTROL bit to following character
        FORM            adds META bit to following character
        β               adds META bit to following character
        ⊗               translated to ESC
        ⊗-              translated to BREAK
        ≡               quote the following character (no translation)

Note that  the characters  | and  ? which  have special  meanings in  the DO
program are not treated specially by the BATCH/DO command.

If the /NOW switch is not used in the BATCH command, BATCH writes a  file on
your alias disk area called BATn.DMP (n is a number chosen to make  the name
unique) and  enters a LATER  request for the  running of that  program.  The
BATn program types the desired commands into a pseudo-teletype (PTY) when it
is run.   The LATER request  starts the  BATn program at  one more  than its
normal start address; if it is started normally (e.g., RUN BATn),  it simply
types out the commands stored in it, so you can find out which BATCH program
is which if you  enter more than one.  When  the BATn program is  started by
the LATER request, it writes a file called BATn.LOG on your login  disk area
with a log of the commands  and typed output.  The BATn.DMP file  is deleted
when the request is being run for the last time.

If BATCH/NOW is used, no BATn.DMP file is written.  The MAIL  program itself
executes the command sequence through a PTY as soon as you have  entered the
whole command sequence.  In this case, the log file is called  BATCH.LOG and
is written in your alias directory.

BATCH  requests can  be  deleted selectively  by using  the  monitor command
CANCEL  (see page  104).  If  you delete  a BATCH  request with  CANCEL, the
BATn.DMP  file  will  not  have been  deleted;  you  must  delete  this file
separately.

The BATCH  command has  many deficiencies  when considered  as a  full batch
processing facility.  There is no way to control the commands issued  on the
basis of  past output, no  provision for aborting  a command sequence  if an
error occurs, no provision  for mounting tapes or collecting  listings.  The
command is not intended as a  real batch processing system, but merely  as a
convenience for delaying the execution of simple commands.
                 MAIL: The REENTER Error Recovery Facility


The MAIL program remembers all of its input after execution, and can be made
to  repeat  the  command  with  or  without  modifications  to  the command,
switches, destinations, and message.  To invoke this facility,  type REENTER
to the monitor.

To use this feature  while typing in the message  text, you can type  ↑C and
REENTER, but any text still in the line editor buffer or the TTY buffer when
you type ↑C  will be lost.   Unless the system  is very heavily  loaded, the
problem of losing text from the  TTY buffer should not come up, but  be sure
to type <CR> to activate any text in the line editor before typing ↑C.

Two different modes of REENTER  operation are provided.  If the  command and
destination list were all typed on one line of input from a Stanford display
terminal, that  line is loaded  into the terminal's  line editor and  can be
edited and re-activated.   In this case, the  program forgets all  about the
previous command and  starts from scratch when  the edited command  is seen.
The text of a single-line message will be included in the reloaded  line; no
message text will be  loaded for a multi-line  message, but the old  text is
remembered and if the new command does not contain a message or a pointer to
a message file,  the old text  will be re-used.   Note: the subject  line is
considered part of the text, and the state of the /SUBJECT switch may not be
changed if the old text is re-used in this way.

The second mode of repeating a  command is used if the destination  list was
given  on more  than one  line or  from a  non-display.  In  this  case, the
command and destination list are typed and you are asked if you want to keep
the old destinations.   Whether you answer yes  or no, the command  name and
global switches  are loaded into  your line editor  (displays only)  and new
destinations can be added on the command line.  Finally, if no  message text
appears in the re-edited  command, the old message  is used as in  the first
mode.  (Note: in this mode, only valid destinations are remembered  from the
old destination  list; in the  first mode what  is remembered is  the actual
string of characters you typed.)

If the old text is re-used,  in either mode, before sending the  message the
MAIL program asks if the user wants to edit the command or the  message text
with E.  (Editing with E is allowed whether or not the user is at a Stanford
display, although of course it's  easier to do from a display.   SOS editing
is not available because SOS does not use the same SNAIL-startup conventions
as E.)  In  this case, a  MAIL.TXT file is  written and E  is run as  in the
<CONTROL><META>E  case--return  to  the   MAIL  program  is  done   via  the
<CONTROL>XRUN command.
                          MAIL: Hand-Holding Mode


If a command (other than LATER  and RETRY) is given with no  arguments other
than optional global switches, the MAIL program will use an alternate syntax
called hand-holding  mode which  is more  verbose but  less confusing  to an
inexperienced  user.  In  this mode,  MAIL will  prompt separately  for each
piece of information appropriate to the given command; the  possible prompts
include:

        "To" destinations
        "CC" destinations
        Date and time
        Expiration count
        Subject
        Message text

One possibly important difference between this and the normal syntax is that
the subject line is always entered separately from the body of  the message,
even if the latter comes from a file.

Each prompt may be answered by  a line containing just the character  "?" to
see a  message explaining the  format of the  required information  for that
prompt.

A REENTER command following the use of this format will be treated  the same
as one following a multi-line destination list in the normal format.
               MAIL: Interfacing to MAIL from Other Programs


The MAIL  program can be  run from  another program using  the SWAP  UUO.  A
special facility is provided for providing MAIL with the  required arguments
via  the  ACs which  are  preserved by  the  SWAP UUO.   To  do  this, start
SYS:MAIL.DMP at one less than its normal starting address.  The message text
(including subject line, if desired)  must first be written in a  disk file,
or a TMPCOR file  if the MAIL program  is to be run  in the same job  as the
swapping  program.  MAIL  will,  if desired,  SWAP back  to  the originating
program (or any other program).  The ACs should be set up this way:

0-5 SWAP UUO arguments for return after MAIL if desired:
         0 device
         1 filename
         2 ext,,mode bits (see UUO manual)
         3 core,,starting address increment
         4 file PPN
         5 login PPN if starting new job
6-16 MAIL arguments:
         6 destination PPN or file (see below)
         7 file extension if required
        10 file PPN if required
        11 message text file name
        12 message text file extension
        13 unused
        14 message text file PPN
        15 date and time for REMIND (see below)
        16 flags (see below)
17 is the SWAP AC and is not preserved in return after MAIL.

The flags in 16 are:
        400000,,0   not used
        200000,,0   /-E
        100000,,0   /NODIST for ARPAnet mail
         40000,,0   /LIST
         20000,,0   /SEND
         10000,,0   /-HEADER
          4000,,0   /QUEUE
          2000,,0   /APPEND
          1000,,0   /DIST for local mail
           400,,0   /WHERE
           200,,0   /SUBJECT
           100,,0   /MAIL
            40,,0   /YESMAIL
            20,,0   /NOMAIL
            10,,0   /EXPAND
             4,,0   command is REMIND
             2,,0   command is MAIL
             1,,0   command is SEND
           774000   not used
             2000   read destinations from named file (ACs 6-10)
             1000   return via SWAP when done
              400   text input is from TMPCOR file
              200   delete input text file when done
              100   send to job (binary number in AC 6)
               40   send to TTY (SIXBIT name in AC 6)
               20   destination is * or ARPA* (AC 6 ignored)
               10   mail to explicitly named file (ACs 6-10)
                4   don't use this bit (/CC)
                2   /ARPA (2000 bit must also be on)
                1   if SEND, send to ARPA* (20 bit must also be on)
                    if MAIL, delete old contents of file
                    (for PLAN, see below)

Nothing  is  guaranteed  about  the  results  of  setting   inconsistent  or
irrelevant combinations  of flags,  e.g., /EXPAND for  a command  other than
REMIND.  Note that the /MAIL switch has two different meanings for  the SEND
command and the REMIND  command, but is the  same bit in either  case.  Bits
which are currently unused should be zero.

If the 400 bit in AC 16 is on, the left half of AC 11 is taken as the TMPCOR
file name; the TMPCOR  file PPN is the alias  PPN of the MAIL job.   The 200
bit in AC 16 will delete either a DSK file or a TMPCOR file.

The usual case is  sending a message to  a programmer name.  For  this case,
AC 6 should  contain zero in  the left half  and the sixbit  programmer name
right-justified in the right half.   Do not use "." for your  own programmer
name (use the programmer name explicitly) nor "*" for a wildcard destination
(use 20 bit in AC 16).

Mail can be sent to any file (as in the #file destination format) by setting
the 0,,10 bit in AC 16  and specifying the filename in ACs 6-10.   More than
one  destination, or  a  recipient at  another  ARPA network  host,  must be
specified by using an indirect file as in the @file destination  format; set
the 0,,2000 bit in AC 16 and  specify the file with the destination  list in
ACs 6-10.

Any files used (except the TMPCOR  message file) must be on device  DSK.  No
default extensions will be  used; specify the desired  extension explicitly.
(The right half of an extension word  must be 0.)  A zero file PPN  uses the
job's alias PPN as usual.

Exactly one of the 7,,0 bits should be on in AC 16 to specify the command to
be carried out.  The effect of the PLAN command is achieved by  specifying a
MAIL  command with  the delete-old-text  bit and  explicit  file destination
(2,,11  in  AC 16)  and "   prg.PLN[2,2]"  as  the  destination  filename in
ACs 6-10.

The date and time in AC 15 is in the format:

        BYTE (4)MONTH (5)DAY (6)YEAR (3)DAY-OF-WEEK (6)HRS,MINS,FLAGS

The flags are used for special formats:

        0,,1    absolute date, DAYCNT in left half
        0,,2    date is tomorrow (lh is zero)
        0,,4    every day reminder (lh is zero)

Otherwise, zero in the left half means today's date, a nonzero number in the
7,,0 bits is an every-week reminder (1=Wed, 7=Tues), and anything else is an
every-month or every-year reminder with  at least one of the month  and year
fields zero.  Month 1 is January, day 1 is the first of the month,  and year
1 is 1965.  The HRS field  is hours past midnight (0-23) and the  MINS field
minutes past the hour (0-59).  An absolute date (no wild fields) must  be in
DAYCNT form.

Another facility is  also provided for queuing  MAIL requests when  the SWAP
technique is inappropriate, for  example because another job slot  might not
be available and your program must keep itself going rather than  be swapped
back in later.   This facility was  designed for the  FTP server but  can be
used by other programs.   Write a file called  <anything>.FTP[RMD,SYS] which
contains, in  text form, a  MAIL command and  destination list on  the first
page, and the message text on  the second page.  (This is the format  of the
MAIL.TXT file used for editing messages with E.)  When the remind phantom is
next run, it will try to start a MAIL job which will execute the command and
delete the file.
                          MAIL: The CANCEL Command


The monitor command CANCEL will run the CANCEL program which will  list, and
allow selective deletion of, REMIND requests from or to you, BATCH and LATER
requests by you, and queued mail from you.  This program can also be used to
list these requests  without asking whether you  want to delete  them: after
any request is listed, type the letter L in answer to the  deletion question
and any remaining requests  will be listed without interruption.   Since the
CANCEL program has  to share the  use of the  reminder queue files  with the
system reminder phantom job, there will sometimes be a delay in  the listing
of reminders.  An appropriate message is typed in this case.
                           MAIL: The RCV Command


The RCV program allows MAIL  messages to be selectively deleted,  listed, or
saved as  desired.  The  program is  called by  simply entering  the monitor
command RCV.  All  mail files which  can be construed  as being for  you are
offered for  your perusal.  It  is also possible  to edit other  users' mail
files with RCV by giving an argument, e.g., RCV BH.  The command  RCV * will
allow editing of the system message file NOTICE.TXT[2,2], and RCV GRIPE will
allow editing of  messages sent by the  GRIPE command.  Most mail  files are
maintained in E format,  and E format is not  preserved when such a  file is
edited with RCV--therefore:

*** NOTE: IF YOU EDIT AN E-FORMATTED FILE, RCV WILL INVALIDATE ***
*** THE DIRECTORY PAGE AND ISSUE A WARNING.  SUCH FILES SHOULD ***
*** USUALLY BE EDITED WITH E TO PRESERVE THE PAGES AND FORMAT. ***

RCV also allows editing of  the files created by the news  service automatic
notification feature; the command RCV \ will present your  notifications for
editing, and RCV \PRG will allow you to edit the notifications sent  to user
PRG.

It is also possible to use RCV on files not in [2,2] (such as  saved message
files previously created with RCV) with a command like:

RCV #filename

with default of  DSK:SAVED.MSG in your  (alias) disk area.   The conventions
given below for output filenames also apply here.

Finally, the command RCV ?PRG will type the plan file for user PRG, if there
is such a file.  In this case, the file is merely typed, not edited.

** NOTE: ONCE RCV HAS OPENED A MESSAGE FILE, YOU SHOULD EXIT ONLY **
** BY TYPING "E" TO AN OPTION REQUEST, AS EXPLAINED BELOW. TYPING **
** <CALL> TO EXIT MAY RESULT IN LOSING SOME OF YOUR MESSAGE TEXT! **

If none of the messages in an input file is deleted or changed, RCV does not
write out a new version of  the file; thus the file's time and  date written
are unchanged, and, particularly, any ETV directory the file may have had is
still intact.

RCV deletes without comment all formfeed characters in any file edited (that
is, any file actually changed).  Thus  any page structure of such a  file is
destroyed by RCV.

When a mail file  is opened, messages are typed  out one at a time,  and for
each message you may select several processing options, in the format

<options> [ <space> <filename> ] <cr>

where the [...] represents an optional argument.  Each option is represented
by a letter; more  than one may be used,  except that a few options  must be
used alone, as noted below.  The filename may be specified if you select the
C (copy) or T  (transfer) option.  For help in  specifying a file, use  ? as
the filename.  Here are the option letters which select a  final disposition
for the message:

  S  Save the message in the mail file.
  D  Delete it from the mail file.
  C  Copy it to a file of your choice.
  T  Transfer it to a file.  Like CD.
  L  LPT spool it.
  X  XGP spool it.
  K  Transfer it to the file LOGOUT.MSG, which will be typed automatically
     when you log out.

If none of the above are used, the message will be Saved.   Combinations may
be used, e.g., LD will spool the message on the LPT and also delete  it from
the  mail file.   The message  will be  Saved unless  D or  T  is explicitly
specified.  Along with any of the  above (or alone, implying S) may  be used
at most one of the following editing options:

  A  Append to the message from the terminal.
  Z  (Stanford  displays only)  Edit  the message  line-by-line  using the
     system  line  editor.  If  you  need help  with  this  facility, type
     <control><meta>? after entering the line editing mode.
  M  (Stanford  displays  only) Modify  the  message by  running  the text
     editor, E, with that message  as its input.  Return from E  by typing
     <control>X RUN.

Along with  any of the  above, or  alone, can be  used the  following option
letters to avoid seeing more messages:

  E  Exit, and enter spooling requests from L or X options.
  N  Go to the Next mail file, if any, else exit like E.

If the message was  longer than the amount  RCV types out before  asking for
option requests,  the following  option may  be used  along with  any others
specified:

  Q  Quiet  processing; do  not type  the remainder  of the  message while
     processing it as usual.

Note: E or N with no other options implies Q  automatically.  Alternatively,
any of the following may be used as the only option, for special processing:

  P  Postpone the  decision for  this message.  This  applies only  if the
     message  was  longer than  the  amount RCV  types  before  asking for
     options, and you wish to see the rest of the message  before choosing
     options.
  ?  Type this option list.

Spooling requested by L or X is not done until RCV is exited (by typing E to
an option request, or by running out of input).  The default filename  for C
and T  is DSK:SAVED.MSG  in your alias  area.  Filenames  may only  be given
along  with a  C or  T option;  if C  or T  is used  without a  filename the
previous  file is  continued.  (The  first  time, you  will be  asked  for a
filename, which may be simply <cr> for SAVED.MSG.)

If you use an argument in  the RCV command to edit another user's  mail, the
first time you specify any option which would remove a message from the mail
file or  alter its  contents you  are asked  to confirm  it.  Once  you have
confirmed such an option, however, you are not asked again.

There are two options provided at Stanford displays for editing the  text of
a message.  The M option writes  the message in a disk file,  QQRCV.TMP, and
runs the E  editor, which allows great  flexibility because of  E's powerful
editing  capability.   However, it  is  rather slow,  because  all  of RCV's
internal information and  all the message files  must be saved on  the disk.
For minor  corrections to  a short message,  you may  prefer the  weaker but
faster editing capability  provided in RCV itself  by the Z option.   If you
select that option, the lines in  your message will be presented to  you one
by one in your  terminal's line editor.  You  may edit each line,  using the
normal line editor commands, and type  <cr> when done with a line.   You may
also type the following special characters (α means control, β means meta):

  α<cr>    Accept the current line as  it now appears in your  line editor
           buffer and stop line editing, accepting the rest of the message
           as is.
  αβD      Delete the current line.
  <alt>    Undo the changes  in this line, loading  a fresh copy  into the
           line editor.
  αβ<cr>   Accept lines to be  inserted before the current line,  until an
           inserted  line is  terminated with  α<cr> instead  of  <cr>, or
           <alt> is typed at a blank line.
  αβI      Same as αβ<cr>.
  αD       (at the end of a line) Combine this and the next line  and load
           the combined line into the line editor.
  β<cr>    Break the line at the cursor, accepting the text to the left of
           the cursor as it stands and editing the remaining text as a new
           line.
  αβA      Leave line edit  mode, as for α<cr>,  but accept text  from the
           terminal to be  appended after the existing  text, as if  the A
           option had been selected.
  αβ?      Type this list.

Blank  lines presented  for editing  in the  Z option  are indicated  by the
typing out of a  space before loading the  line editor with the  empty line;
thus originally empty lines will be indented in the typeout.  In both  M and
Z options,  the initial header  line is  not edited.  In  the Z  option, the
blank  line at  the end  of the  message is  not edited.   In the  A option,
appended text will be inserted in front of the blank line at the end  of the
message, unless the P option was previously used on the current message.

The first time you specify C or  T, you are asked to specify a file  name if
one  was not  included in  the option  line.  You  can reply  with  either a
standard  filename, ?,  or  <cr>.  Just  <cr>  uses the  default  file name,
DSK:SAVED.MSG in your (alias) area.  Just ? will print a helpful message and
let you try again.  Thereafter, whatever file you specified will be used for
all  C and  T messages  (the file  is not  closed until  you exit  or select
another one) until you specify a new filename along with a C or T  option as
described above.   Note: if the  specified file already  exists and is  in E
format, the  new messages are  added at the  end of the  file preceded  by a
single formfeed; if the file already exists but is not in E format,  the new
messages are  added at  the beginning  of the  file.  If  the file  does not
already exist, it is created in E format and a warning that you are creating
a new file is issued.

If all messages are  removed from an input  file, the file is  deleted after
all output  files are closed,  unless the input  file is named  OUTGO.MSG in
which case the empty file (which may actually contain a few spaces, carriage
returns, and linefeeds) will survive.   If none of the messages in  an input
file is  deleted or changed,  RCV does not  write out a  new version  of the
file;  thus  the   file's  time  and   date  written  are   unchanged,  and,
particularly, any ETV directory the file may have had is still intact.

The  notation ↓chars↓  may be  used to  get non-alphameric  characters  in a
filename.  In addition, a shorthand notation is provided for  entering names
of mail files: if  the character ∂ is  the first character of  the filename,
then the device becomes DSK, the default extension .MSG, and the default ppn
[2,2].  (The extension  and ppn can be  changed later in the  filename.)  If
the next non-blank  character is not alphameric,  the filename used  is your
programmer name right  justified, e.g., ↓   REG↓.   (Note that this  is your
own  login  name, not  the  name whose  mail  you are  editing.)   Thus, the
filename  ∂ represents  your own  mail file.   You can  specify  a different
programmer name with  the format ∂prg  and either this  or the format  ∂ can
also  be optionally  followed by  an extension  and/or a  PPN to  change the
default values as described above, e.g., ∂.PUR or ∂[1,ME].

RCV has a  fairly small message  buffer.  If a  message is longer  than that
buffer, seeing the first few lines of the message may tell you  enough about
it to decide how to process it without seeing the rest.  Therefore,  in that
case, you will see  as much as fits, followed  by an overflow notice  and an
option request.  After you enter  the desired options, the remainder  of the
message will be typed  as it is being processed,  so you may safely  use the
Delete option and you will still  see the rest of the message.  If  you want
to avoid this continued typeout,  type the letter Q (for Quiet)  before your
option  choice, e.g.,  QD for  Quiet Delete.   Q is  only recognized  when a
message overflows.  If you  select E or N with  no other options, you  get Q
automatically.  If this is not what you want, type, e.g., SE.  If  you wish,
you may  postpone the  decision on how  to process  the message  until after
seeing the rest of  it, by typing P to  the option request.  This  will type
the remainder of the message and ask again for options.  QP is  illegal, and
P is only legal when a message overflows.

RCV may be used when not logged in; however, each user can control access to
his own  mail, by  OPTION.TXT options.   Three possibilities  are available.
The default is no access.  To  allow your mail to be read but  not modified,
put

RCV:READ

in your OPTION.TXT file.  If  the not-logged-in user types RCV PRG  the file
examined is  OPTION.TXT[1,PRG].  You may  also allow not-logged-in  users to
edit your mail file as if they were logged in by using

RCV:WRITE

as the option.

Not-logged-in users at Stanford display terminals (Data Disc or  III) always
have at least READ access to mail.

It should be noted that the normal file protection mechanism  still applies,
so that most options which involve copying the message to another  file will
not work when not logged in.  This includes C, T, K, L, X, M, and P.

A not-logged-in user who is reading mail as permitted by the READ option may
safely use <call> to quit RCV.

There  is a  special option  available  in RCV  for reading  the  A.P.  news
digest.  This option  is provided when the  RCV command is given  without an
argument, if you have an OPTION.TXT file with a line of the form

RCV:DIGEST;

You are asked  "Read A.P. digest?" if the  digest file exists.   This option
may be used along with READ or WRITE as described earlier.

Another special option available through the OPTION.TXT file is:

RCV:NOMAIL;

If you have this  option and give the  RCV command without an  argument, RCV
ignores your main message file and simply processes any other files which it
would normally handle.   This is provided for  users of various  special RCV
features (such as  DIGEST above) who  use E to  edit their mail  files since
mail files  are now  normally in E  format.  To  override the  NOMAIL option
(i.e.,  to  edit  your  mail  file  with  RCV),  give  your  programmer name
explicitly in the command, e.g., RCV PRG.

For use at non-Stanford  terminals, RCV has a  mode in which it  accepts tty
input in SOS representation (see Appendix 13).  The main reason for  this is
to allow ?* instead of ∂ for redirecting messages to another mail  file, but
it can also  be used with the  append option to allow  appending upper/lower
case text from an upper-case-only terminal.  The following notes apply:

1.  When RCV is started, it decides whether or not to use SOS representation
on  the  basis of  the  FCS (full  character  set) bit  maintained  for each
terminal by the monitor.  This bit is set by the TTY FULL command  (or ESC F
at a Stanford display) and cleared by TTY NO FULL (or BREAK F).

2.  Whenever RCV reads an altmode character from the tty, it will  enter SOS
mode and otherwise ignore the altmode, except that if you are already in SOS
mode the sequence ?<alt> will leave that mode.  (If you are not in SOS mode,
of course, the ?  will be taken as a  real question mark and the  <alt> will
enter SOS mode!)

3.  These  comments apply even  to the original  command line,  although the
monitor will echo  a crlf after  the altmode to  confuse you.  Note  that if
your FCS bit  is off and you  want to invoke the  RCV feature which  types a
user's plan file, you must say RCV ??prg instead of RCV ?prg as usual.

4.  Under no  circumstances is tty output  done via SOS conversion.   I hate
seeing all those question marks!

5.  If you are in SOS mode  and type ? followed by a character which  is not
defined  as an  SOS code,  the  character will  be treated,  and  echoed, as
ASCII 7; this will ring your tty's bell if it has one, give an error message
if you are responding to an  option request, and insert a π in  your message
if you are appending.
                              APPENDIX 5--DART


The DART (Dump and Restore Technique) program is used to save disk  files on
magnetic tape.  It also  includes tape positioning commands.   This appendix
is excerpted from the  file DART.REG[UP,DOC], which includes  information on
DART  tape formats,  complete disk  dumps, etc.,  as well  as  the following
facilities provided for individual users.

In  the description  below, braces,  { and  }, are  used to  denote optional
items.  Vertical bar, | , denotes an exclusive-or choice.  Pointed brackets,
< and >, are used to enclose syntactic items that are defined below.

DART accepts the following monitor commands:

  DUMP     {<dest>←}{<source>}
  RESTORE  {<dest>←}{<source>}
  REWIND   {<dev>{:}}
  EOT      {<dev>{:}}
  ADVANCE  {FILE|RECORD} {<dev>{:}} {<count>}
  BACKSPACE{FILE|RECORD} {<dev>{:}} {<count>}
  LOCATE   {<dest>←}{<source>}
  TLIST    {<dest>←}{<source>}

  <dest> ::=    {<dev>:}<file>{.<ext>}{[<prj>,<prg>]}
  <source> ::=  {{<dev>:}{[<prj>,<prg>]}@}
                     {<dev>:}<file>{.ext}{[<prj>,<prg>]}{,<source>}

  <dev> is "any" legal device name.
  <file> is any file name or *
  <ext> is any file extension or *
  <prj> is any project code or *
  <prg> is any programmer name or *
  <count> is any string of decimal digits.

Caution: The only devices that are appropriate here are disk, mag  tape, and
UDP.

REWIND

This command will cause the device  named to rewind to load point.   MTA0 is
the default if  no device argument  is used.  The  device named should  be a
magnetic tape unit.

EOT

This  command  will cause  ADVANCE  FILE  to be  repeated  until  either two
adjacent file marks are seen (logical end of tape) or until physical  end of
tape is reached.

ADVANCE and ADVANCE FILE

This command will cause the tape  to advance past the next file mark  on the
tape.  If a repeat factor is  given, then the command will be  repeated that
number of times.

Caution: DART  often records more  than one  disk file on  a mag  tape file!
Therefore, advance file will (sometimes) skip more than one disk file.

ADVANCE RECORD

Same as  ADVANCE FILE except  that instead of  file marks, record  marks are
used.  This command leaves you at the front of a record.

BACKSPACE and BACKSPACE FILE

This command  will cause the  tape to  move backwards until  a file  mark is
seen.  DART then does one ADVANCE FILE operation to position the tape at the
front of a file  (immediately after the file  mark just read).  If  a repeat
argument  is given,  then  that argument  is  used to  repeat  the backspace
operation.  Only one ADVANCE is used, after all backspace operations.

Caution: BACKSPACE or BACKSPACE 1 will position the tape at the front of the
current mag tape file.  BACKSPACE 2 will position one previous, etc.

BACKSPACE RECORD

Same  as  BACKSPACE FILE  except  that record  marks  are used  to  stop the
operation instead of file  marks.  After all backspaces are  completed, DART
does an ADVANCE RECORD command.

LOCATE

For  each file  named in  the argument  list, this  command prints  the tape
numbers where this file was  dumped and the corresponding creation  dates of
the file.

TLIST

This command will list on the destination device the names of the files that
are read from the source device.

DUMP

This command will write on the destination device, which should be a magtape
(default is MTA0),  those files that are  specified by the source  term.  If
there is no source argument, *.*[current area] is used.

RESTORE

This command will  restore from tape to  the destination the files  that are
described  by  the  source  term.   A  null  source  or   destination  means
*.*[current area].  The command RESTORE [*,REG]←[*,REG] will restore  all of
REG's files to  the areas that  they were dumped from.   Note that if  any *
terms  are specified  or implied  in  the source,  the entire  tape  will be
searched for matching terms.
                   APPENDIX 6--SERVICE LEVEL SYSTEM (RSL)


The RSL monitor command runs the RSL program to reserve service  level.  The
monitor command takes no arguments; the RSL program itself  accepts commands
which control its  operation.  The first  section of this  appendix explains
the concept of service level.

The timesharing scheduler gives  different priorities to each of  three user
classes:  interactive users,  reserved users,  and all  others (scavengers).
The first goal of the scheduler  is to provide good service to  anyone doing
interactive work such as editing.  The system decides whether a given job is
currently interactive on the basis of keyboard input activity.

When  you  log  in at  a  time  for  which you  have  made  a  service level
reservation, you are assigned that service level.  Whenever you are running,
the scheduler will  then attempt to  give you a  processing level (%  of CPU
time) given by

PL = SL - C * (B - 1)/5

where SL is the service level, C is your current core size (in pages), and B
is the price of service level.  The system will not let more than  a certain
total service level to be allocated in this way (currently 80%).

If you are neither interactive nor  reserved, you get some of what  is left,
which may  be pitifully  little.  The  system is  supposedly rigged  so that
reserved users always get service at least as good as scavengers.  Note that
if you are editing and execute a long-running string search, the  system may
decide you are a scavenger and take forever to finish.

Each authorized user  has an allowance of  two kinds of money,  called whams
and bams.  Whams  may be used only  to purchase reservations  for peripheral
devices, including III terminals, while bams are good only for  CPU service.
The allocations are as follows.

                  Whams Bams
  Half time user    4    100
  Full time user    8    200
  Panic user       16    400

You are half time or full  time in accordance with the portion of  your time
devoted to A.I. activities.  In  an emergency situation, you may be  given a
short term appointment as a Panic user.

Your "money" allocations are actually revolving funds in that if you reserve
machine time  and use  it, you may  then re-use  the reservation  money.  In
effect, then, there is a limitation  on how much you can reserve at  a given
time.   There is  no conversion  between whams  and bams,  nor can  funds be
transferred between persons.

The display costs W (whams/hour) vary with time of day as given in the table
below.  The  price P (bams/hour)  of buying any  given service level  SL (in
percent) is

P = SL*B

where B is the rate (bams/hour) given in the same table.

       Time           0000-0900   0900-1300   1300-1800   1800-2400
                        W & B       W & B       W & B       W & B
  Monday-Friday           1           2           3           2
  Sat., Sun., holidays    1           1           2           1

You  may  reserve a  display  without a  service  level or  vice  versa, but
reservations may  be made  only for  integral hours  beginning on  the hour.
Other peripheral devices may be reserved only if you have reserved a service
level.  The minimum service level purchase is 5%.

The time from  8AM to 9AM and  from 5PM to 7PM  on weekdays is  reserved for
maintenance.  No service level or  device reservations may be made  in those
time periods until 18 hours before the period.  Maintenance reservations for
the entire machine may be made, however.
                Service Level System: Using the RSL Program


The monitor command RSL with no arguments runs the RSL program.  You must be
logged in first.

RSL  will  prompt you  with  an asterisk  ("*")  when it's  ready  to accept
commands.   Command  format  is discussed  in  detail  below.   Commands are
RESERVE, CALENDAR, AVAILABLE, DISPLAY, MAINTENANCE, HELP, and EXIT.

For example, to reserve 15% SL at  1400 on the 31st of December, any  of the
following command strings will serve:

RESERVE 15 SL AT 1400 HOURS ON 31-DEC
r 15 on 31 decemb at 2 p.m.
RE 2 PM ON 31 DECEMBER 15
R 15 14 31 12

If  you  wish  to  change  a  service  level  reservation,  just  do another
reservation  for  the  new  desired  amount.   Releasing  a   service  level
reservation may be done by "reserving" 0% SL.
                      Service Level System: IMPORTANT!


When you are through making reservations, you should exit from RSL by typing
E.  If you  exit instead by  typing CALL, then  there is a  possibility that
your reservations  may get lost.   The E command  causes reservations  to be
written out onto the disk.
                Service Level System: How to Reserve Devices


The six  III displays, the  user disk  pack, plotter, and  MTA0 may  also be
reserved.  RSL merely makes and retains device reservations;  unlike service
level, enforcement is  left up to the  users.  To reserve III24,  5% service
level, and the user disk pack, type  RESERVE 5 SL III 24 UDP or  R III4UDP5.
A device may be  unreserved by preceding it with  a minus sign: R  -III PLTR
-UDP MTA will simultaneously reserve MTA0 and the plotter, and unreserve the
UDP and any and all IIIs.  If you don't care which III you get, you  may say
III instead of III4  or III23 etc.  Note  that the plotter is  considered by
the computer to  be the same  device as the  paper tape punch,  so reserving
PLTR also makes the PTP unavailable.
               Service Level System: Other Commands Available


To get a  list of your  current reservations, type  DISPLAY or D  for short.
The  command  string D  XYZ  will get  a  list of  programmer  XYZ's current
reservations.

The CALENDAR command will show you which programmers have  what reservations
on  a  given  time and  date.   For  example,  C FOR  3  will  show  you the
reservations for the current hour and the following 2 hours also.

AVAILABLE is a short form of CALENDAR.  A 0000 HOURS FOR 24 ON 1-JAN-88 will
yield 24 lines of output  telling how much service level is  still available
at each time slot on the first day of 1988, should the system last so long.

HELP  or H  will  type for  you a  summary  of command  string  structure in
condensed form, not necessarily comprehensible.

The MAINTENANCE or M command reserves the entire (bare) machine for hardware
or  software purposes,  e.g., M  4 pm  for 2  will request  the  machine for
maintenance from 4 to 6 pm.  This command can also be used to cancel  a bare
machine reservation.   Just type a  minus sign immediately  in front  of the
date specification,  e.g.  M  -25 nov  73 for  2.  Do  not use  this command
without prior administrative approval.

Proper  use of  the EXIT  command  can be  very important,  and  requires an
understanding of  its function.  The  data base for  all current  and future
reservations is kept internally in the *-SL-* program at all times.  Many of
the commands you  give to RSL  cause a change  in this data  base.  However,
these changes  are not necessarily  made in the  permanent data  base, which
lives on the disk.  The EXIT (or E) command causes the internal data base to
be written  out on  the disk,  and it is  only this  copy which  can survive
system crashes or system  maintenance.  It is possible to  lose reservations
by leaving RSL with CALL instead of E.
                  Service Level System: RSL Command Syntax


Anything in curly brackets is optional.

A slash ("/")  between two terms represents  one or more  delimiters (space,
slash, apostrophe, minus sign, comma).

A double arrow ("↔") between two terms indicates that the order of the terms
is not always important.  If the syntax of a term distinguishes it,  then it
may appear anywhere in the command line, provided no nondistinguishable term
which might be confused with it precedes it.  (It's simpler than it sounds.)

  <RSL command> ≡ <Rcom>|<Acom>|<Ccom>|<Dcom>|<Hcom>|<Mcom>|<Ecom>
  <Rcom> ≡ RESERVE {<sl-arg>}↔{<hr-arg>}↔{date-arg>}↔{<for-arg>}
                          ↔{<device>}
  <Acom> ≡ AVAILABLE {<hr-arg>}↔{date-arg>}↔{<for-arg>}
  <Ccom> ≡ CALENDAR  {<hr-arg>}↔{date-arg>}↔{<for-arg>}
  <Dcom> ≡ DISPLAY {<programmer initials>}
  <Hcom> ≡ HELP
  <Mcom> ≡ MAINTENANCE {-}{<hr-arg>}↔{<date-arg>}↔{<for-arg>}
  <Ecom> ≡ EXIT
  <sl-arg> ≡ <integer> | <integer> SL
  <hr-arg> ≡ {AT} <military hour> | {AT} <civilian hour>
  <civilian hour> ≡ [ 1 | 2 | ... | 12 ] { AM | A.M. | PM | P.M.}
  <military hour> ≡ [0 | 1 | ... | 23]{00} {HRS|HOURS}
  <date-arg> ≡ {ON} <people day>
                          | {ON} <day-arg>/<month-arg>{/<year-arg>}
  <people day> ≡ SUNDAY | MONDAY | ... | SATURDAY
  <day-arg> ≡ 0 | 1 | 2 | ... | 31
  <month-arg> ≡ <people month> | <computer month>
  <people month> ≡ JANUARY | FEBRUARY | ... | DECEMBER
  <computer month> ≡ 1 | 2 | ... | 12
  <year arg> ≡ {19}71 | {19}72 | ... | {19}80
  <for-arg> ≡ <integer> | FOR <integer>
  <device>  ≡ MTA | PLTR | UDP | <iii>
  <iii> ≡ III | III0 | III1 | ... | III5
                          | III20 | III21 | ... | III25
                      Service Level System: Semantics


Names of commands, weekdays and months may be abbreviated by truncation, and
may be capitalized or not.  Device names may not be abbreviated.

The FOR term (e.g., FOR 3) specifies a consecutive number of hours, starting
with the hour and date specified.

When  the syntax  of a  command does  not allow  a left-to-right  scanner to
distinguish terms,  then the ambiguous  terms will be  assumed to be  in the
order listed in the syntax.

If  a  term is  missing  from an  argument,  RSL will  supply  one  it deems
appropriate.  RSL always has a  time and date "in mind," called  the default
date.  The  default time and  date are  usually the last  time and  date you
typed.  If a command does not  specify a time (date), then the  default time
(date) will be used.

Commands terminated  with a  line feed (altmode)  will advance  (backup) the
default time and date before  executing the command.  The amount  of advance
(backup) is  1 hour, 1  day, 1  week, 1 month  depending as  plain, control,
meta, or control-meta were used with the line feed (altmode).

A date  specified by giving  the name of  a day, is  the earliest  future or
present  date  falling  on  the given  weekday.   (Notice  that  at  0830 on
Wednesday, "WEDNESDAY" specifies  either the current  date, or the  date one
week hence, depending on the hour specification.)
                            APPENDIX 7--FIXIMLAC


The FIXIMLAC  command is  used from  IMLAC terminals  to reload  the program
which  controls the  terminal  into its  minicomputer.  The  command  runs a
program on the PDP-10, and may be used without logging in first.  The use of
the command is shown below as part of the startup procedure.

IMLAC RELOADING PROCEDURE

IF THE IMLAC IS DEAD:

1.  SHIFT LOCK off (up).

2.  Start at 40 (Push STOP, then hold the AT 40 key while pushing START).

3.  Type C (upper case) several times to send ↑C's.

4.  Type fiximlM (upper case M goes out as a <CR>).

5.  Wait about 10 seconds to give the system time to log you in.

6.  Hit <CONTROL><TOP><SHIFT>S.

IF THE IMLAC IS ALIVE:

1.  At monitor level, type FIXIML.

2.  When the program puts out a *, type

      <CONTROL><TOP>B             (Sends the IMLAC to its loader)
      <CONTROL><TOP><SHIFT>S      (Starts the loader)
                          APPENDIX 8--ARPA NETWORK


The ARPA network is a  facility organized by the Advanced  Research Projects
Agency of the Department of Defense to connect computers at various research
centers funded by ARPA, allowing people at one host to use the  resources of
another host.  The device which provides the interface between  our computer
and the network, called an IMP (Interface Message Processor), can be used by
user  programs like  any other  I/O device.   Two main  system  programs are
provided for  connecting to  other computers by  console commands:  the user
TELNET program  and the  File Transfer Protocol  program (FTP).   The former
allows you to use your terminal as if it were a terminal of the  remote host
computer; the latter provides high-speed transmission of data between hosts.
This appendix explains the use of these programs.  It contains excerpts from
the file NET.JAM[UP,DOC], which also describes the UUOs for user programming
of the IMP.  The FTP command description here is taken from FTP.DCS[UP,DOC].

The TELNET or TN  commands, which are identical  in effect, are used  to run
TELNET.  The  FTP command  runs FTP.  Both  require that  you be  logged in.
They take a remote host name  as argument.  (The host names are listed  in a
later  section  of  this  appendix.)   Both  programs  try  to  establish  a
connection to  the remote  host.  Once this  connection is  established, the
TELNET program simply allows  you to type at  the remote computer as  if you
were using one of its  own terminals.  (TELNET also handles  special command
characters  which  control local  echoing  of typein,  etc.)   FTP, however,
accepts  commands  which allow  sending  and receiving  files.   The special
commands for  these programs will  be described below,  after a  glossary of
ARPA network jargon.
                           ARPA Network: Glossary


NCP                     This is  the software in  the monitor  that services
                        the IMP.

TELNET                  The thing you  type into that sends  your characters
                        off to a foreign host is a user TELNET program.  The
                        thing that receives them at the other end and passes
                        them  on to  the  timesharing monitor  there  is the
                        server  TELNET.   These  are   generally  user-level
                        programs.

SOCKET                  When you  log in on  another system, there  are four
                        socket  numbers  involved.  There  is  a  local send
                        socket  number,  a local  receive  socket  number, a
                        foreign send  socket number,  and a  foreign receive
                        socket   number.    These   numbers   are   internal
                        connection indexes  and are  used to  keep different
                        connections separate.  Each connection has  a unique
                        set of 4  socket numbers.  (Actually, there  are two
                        connections involved, one in each  direction.  Thus,
                        in  ARPA net  terminology, each  connection  has two
                        socket   numbers,   but   you   have   four  sockets
                        altogether.)

LOGGER                  Each host is supposed to provide a program that does
                        nothing but sit around and listen to socket 1.  When
                        someone connects to socket 1, the LOGGER is supposed
                        to send  it back  a socket  number that  the foreign
                        host can  use to  connect to  the LOGGER's  host on.
                        Only the serving  host knows what socket  numbers it
                        can service, and it is the job of the LOGGER to pass
                        out  these  numbers.  (The  LOGGER  also  listens to
                        socket 3 for FTP requests.)

RFC                     Request for connection.  This is how a pair of hosts
                        establish a connection.  The originating  host sends
                        an RFC to the  destination host with a  local socket
                        number  and a  foreign socket  number  as arguments.
                        The destination host can complete the  connection by
                        returning an  RFC with the  same socket  numbers, or
                        can refuse the connection by returning a close code.

LINK                    Once  a  connection is  established,  an  8-bit link
                        number is assigned  such that the 8-bit  host number
                        concatenated with the 8-bit link number is unique at
                        both ends of the connection.  During the lifetime of
                        the connection, the link number is used  to separate
                        the connections, being as how the socket numbers are
                        32 bits long.  The IMP itself is programmed  in such
                        a way that only one  message may be in transit  on a
                        particular  link at  a  time.  The  IMP  signals the
                        sending  host  that  the  message  has   arrived  by
                        returning a RFNM (request for new message) with that
                        link  number  as  an  argument.   All  of   this  is
                        invisible to the user.

CONTROL MESSAGES        Data  is  sent  between  hosts  on  a  non-zero link
                        number.  Link zero  is defined as the  control link,
                        on   which    hosts   communicate    regarding   the
                        connections.  All host to host protocol messages are
                        exchanged on link zero.

ALLOCATION              The host  to host  protocol defines  a kind  of flow
                        control  on a  higher level  than the  RFNM control.
                        This is the allocation system.  When a connection is
                        first  established,  the  receiving  host   sends  a
                        control message  telling the  sending host  how many
                        bits and messages can conveniently be buffered.  The
                        sending host must then not send more than  that many
                        bits or messages without waiting for more allocation
                        from the receiving  host.  Although much of  this is
                        unseen to  the user, the  user has control  over how
                        much  allocation  the system  will  give  the remote
                        host.  For  data and file  transfer purposes,  it is
                        convenient  to  increase  the  allocation  over  the
                        system default amount.
                       ARPA Network: The User TELNET


Our user TELNET program is run  by the TELNET and TN commands, which  take a
host  name as  argument.  When  it is  run, it  attempts to  connect  to the
specified host.  It will  type either Connection established  if successful,
or an error message  otherwise.  The various possible connection  errors are
described later.

The information which follows also applies to the DIAL program, a version of
TELNET  which  uses  dial-up  telephone  connections  rather  than  the ARPA
network.  The format of the  DIAL command is explained on page  46.  Another
version   of   TELNET   is  called   PTYJOB,   for   communicating   with  a
pseudo-Teletype;  it  is  not  run with  its  own  monitor  command,  but by
R PTYJOB.

Foreign hosts do not use  the Stanford character set.  Instead,  they accept
standard  ASCII  codes.   Letters,  digits,  and  most  of  the  punctuation
characters available in ASCII are  the same in the two codes,  however.  The
main difference  is that codes  1 to 37  (octal), used for  special printing
characters at Stanford, are control characters in ASCII.  The precise use of
these control characters  is defined by the  remote host.  TENEX  hosts, for
example, use ASCII  control-A to mean "delete  one character," like  our BS.
Our TELNET program handles  this difference by interpreting the  CONTROL key
on a  Stanford keyboard  to mean ASCII  control; i.e.,  CONTROL on  a letter
makes TELNET  convert the  letter to upper  case and  subtract 100  from the
character code.  TELNET uses META and CONTROL-META characters as commands to
itself,  as  listed  below.   In  some  cases,  META  and  CONTROL-META  are
equivalent.  In others,  a processing switch is  set by META and  cleared by
CONTROL-META.    In  the   list  below,   βX  represents   META-X,   αβX  is
CONTROL-META-X, and ⊗X means either one.

There are certain differences between the two character sets  in non-control
characters.  These are  handled by automatic  translation in our  TELNET and
FTP user and server programs.  Specifically, the following  translations are
done:

char    Stanford   ↔   external

  ~          32    ↔    176
  }         176    ↔    175
 ALT        175    ↔     33
  ≠          33    →     33

The Stanford not-equal has no external representation and cannot  be entered
from a remote host.  All  other codes are transmitted unchanged.   Note that
our BS (octal 177)  is the ASCII delete;  there is an ASCII  backspace (10),
which is our  λ.  Typing λ  or CONTROL-H to  TELNET will produce  that code.
The  other possible  ambiguities are  our characters  ↑ (136)  and  ← (137).
These codes  have two different  meanings: the DEC  PDP-10 version  of ASCII
agrees with our use, but the official version uses those codes for ∧  and _.
Our network programs support the  arrow version, and our ∧ and  _ characters
are transmitted unmodified as 4 and 30.

It is possible to simulate the CONTROL and META functions when  using TELNET
from a Teletype.  To  allow this, TELNET recognizes the  character control-E
(↑E) as an  escape character if it  is run at a  Teletype.  One ↑E  before a
character means CONTROL, two  ↑Es means META, and three  means CONTROL-META.
For example, ↑E↑EQ from a Teletype is like META-Q at a display.
         ARPA Network: Control Commands to TELNET, PTYJOB, and DIAL


⊗<number>An octal argument is assembled from digits typed this way.

βL       Enter line mode.  Characters you type are sent to your  line editor
         as  usual, and  not  sent to  the  remote host  until  activated by
         RETURN, LINE, ALT, or some CONTROL or META character not taken as a
         line editor command.

αβL      Enter single character  mode.  In this  mode, each character  is an
         activation character, and is sent individually to the  foreign host
         when it is typed.  This is useful for using DDT at a remote host.

⊗S(no arg) Send.  If  TELNET is in  line mode, this  command causes  all the
         characters typed so far to be sent to the foreign  host.  Normally,
         the characters are sent only when CR, LF, or ALT are typed  when in
         line  mode.   This command  is  not useful  for  Teletypes, because
         typing ↑E↑ES does not cause an activation in line mode.

<arg>⊗S  Sends  the  previously  typed  octal  argument  as  a  single ASCII
         character.  For instance, ⊗1⊗0⊗1⊗S is the hard way to send an "A".

αβ<BS>   Sends 177 (ASCII  delete).  The line editor  will not send  <BS> to
         programs without CONTROL-META  if you are in  line at a  time mode.
         BS can be sent in character at a time mode without αβ.

βY       Enter Datapoint simulation mode.   This is often used  when talking
         to the three ITS systems at MIT.  If you also convince MIT that you
         are a Datapoint, their display programs will work properly from our
         display terminals.

αβY      Leave Datapoint simulation mode.

βE       Begin local  echoing.  Also  attempts to  turn off  remote echoing.
         Different  hosts have  different echoing  conventions.   Some hosts
         expect to send  back echoing, some do  not.  If you find  that what
         you type is not being echoed in a reasonable time, you may use this
         command to let you see  what you are typing.  In the  DIAL program,
         this  makes you  look like  a half  duplex terminal,  and  does not
         change the state of remote echoing.

αβE      Terminate local echoing.  Also attempts to turn on  remote echoing.
         One does this when each key one types appears twice on the console.
         Turning off local echoing will often eliminate one copy of the key.
         The DIAL  program does not  attempt to change  the state  of remote
         echoing.

βO       Turn on console typeout.  See αβO.

αβO      Turn off console typeout.  Useful when output is already going to a
         file and you don't want to  waste the time it takes to type  out on
         your console as well.

βR       Inhibit sending of LF after  CR.  Normally, when CR is typed,  a LF
         is invented  by the system  and CRLF is  sent to the  foreign host.
         This command inhibits sending the LF after the CR.

αβR      Enable sending LF after CR.  The inverse of the above command.

βK       Inhibit duplexing LF after CR.  The system normally types a  LF out
         when you  type CR.   This command inhibits  that.  This  command is
         different in effect from βR, because it alters only what appears on
         your screen, not what goes out over the line.

αβK      Enable duplexing LF after CR.  The inverse of the above command.

⊗X       Set escape character.  The escape character is normally set  to ↑E,
         but may be  changed by this command.   The next character  typed is
         taken to be the new escape character.  This is useful for Teletypes
         only.

βI       Open input file.  This command asks for a file name,  then proceeds
         to send said file to the foreign host.

αβI      Close input file.

βD       Open output file.  This command asks for a file name, then proceeds
         to write everything that comes from the foreign host on  this file.
         Note that characters  you type, or  characters from any  input file
         that is opened, do not  go into the output file unless  the foreign
         host is duplexing them.

αβD      Close output file.

βF       Open output file like βD,  but append the text to an  existing file
         of the same name.  You are  only asked for a file name if  you have
         not previously  opened an  output file  with βD  or ⊗F  during this
         session; if you have already  named an output file, the  new output
         will be appended to that one.

αβF      Append to file, like βF, but always asks for a file name.

⊗<form>  If there is  an output file open,  insert a form feed  character in
         it.

⊗Q       Quit.  Terminates connection and  closes any input or  output files
         that may be open.

⊗C       (TELNET only)  Send interrupt.   This is  the network  protocol for
         "return to monitor" or equivalent.

βC       (DIAL  only) Turn  on  control character  mode.  In  this  mode all
         characters received from the dataphone are typed on your console.

αβC      (DIAL only) Turn off  control character mode.  In this  mode, octal
         codes  1-10, 16-37,  and 177  are not  typed on  your  console when
         received from the dataphone.

βM       (PTYJOB only) Enters a mode in which all 9-bit characters  you type
         are sent  unchanged to the  PTY except βM,  αβM, βZ, and  αβZ.  (Of
         course, if you are  in line-at-a-time mode some  control characters
         are still interpreted by the system line editor.)

αβM      (PTYJOB  only) Leaves  the  above mode;  meta-characters  are again
         interpreted as commands to PTYJOB.

⊗Z       (PTYJOB only) Quotes the  following 9-bit character, so it  is sent
         to the PTY as is, regardless of the βM mode switch.

TELNET normally sets the echoing and activation conventions to those used by
the particular host in question, but anomalies do occur.  For  instance, the
foreign host's program may instruct the foreign system to inhibit duplexing,
but that will not inhibit local duplexing.  For example, if local echoing is
in  effect,  an attempt  by  the remote  computer  to prevent  echoing  of a
password will not work.
                  ARPA Network: The File Transfer Protocol


The FTP command  is used to  set up a connection  to a remote  File Transfer
Protocol Server.  It takes a  host argument like TELNET, and  the connection
process is  identical.  Once  the connection is  set up,  you can  enter the
following commands to the FTP  program.  Each command is a name  followed by
arguments as described below.   Only the first four letters  are significant
(letters beyond four are ignored), and commands may be abbreviated by enough
letters to make the abbreviation unique.  Note that file  specifications for
remote  hosts must  follow the  format conventions  of that  host;  they are
passed on verbatim by  the FTP.  In particular,  the case of letters  may be
significant at some hosts.

Note: FTP command strings sent over the control link to the remote  host are
subject to character conversion to conform with standard ASCII, as described
in  the discussion  of  the TELNET  program.   The processing  of  file data
depends on the transfer type; see the TYPE command below.

Some of the commands below  are named the same as the  corresponding command
sent over the network in accordance with the actual File  Transfer Protocol;
in some cases alternate names are also defined.  Complete information on the
protocol  is  available  in  the network  document  with  NIC  number 10596,
although there have  been several modifications  to the protocol  since that
document was written.   There is also  a "new" FTP which  is not, so  far at
least, actually in use.

We do not implement all  of the protocol options.  In particular,  we accept
only MODE S (stream)  and only STRU F  (file).  Our server accepts  MODE and
STRU commands but only with  the above arguments; our user does  not provide
any way of specifying mode or structure.

When the  connection is  first established,  our user  FTP program  tries to
negotiate an  appropriate type and  byte size with  the other  end's server.
First it sends TYPE I, and then BYTE 36.  If the latter is accepted  but the
former  was  not, it  sends  TYPE I again.   (These  commands  are explained
below.)   If  these  are not  accepted,  it  sends BYTE 8,  and  if  that is
accepted, TYPE A.  (All hosts are supposed to accept BYTE 8.)  If nothing is
accepted, the program tries again  after you give the USER command,  in case
the problem is that their server was written by an obnoxious  security freak
as at a well-known system in Cambridge, Massachusetts.

The protocol provides an abort function which can be used to stop a transfer
which  is in  progress.  This  function  can be  requested in  our  FTP user
program by  typing ESC  I.  (From  a non-display,  type CONTROL-C  twice and
REENTER.)  This will send the abort  command only if there is a  transfer in
progress.  Many servers do not  process the abort sequence, but  they should
notice when we close the data connection.  You may end up, if you  are doing
a STOR, writing an incomplete file on the other system.

In the file transfer commands below, the character = can be used  instead of
either  ←  or →  as  shown, for  the  convenience of  users  at non-Stanford
terminals.

TYPE x   x is A, I,  L, P, or E,  and specifies the representation  type for
         the data.  The uses of the various types are as follows:

TYPE A   ASCII type  means that  the file to  be transferred  contains text.
         The characters in the file will be transferred to or from  the SAIL
         character  set,  as  explained  for  TELNET  connections,  and null
         characters will be ignored.   This type should be used  to transfer
         text  files   to  or   from  a  machine   with  a   different  text
         representation.  Text  files can  be transferred  to or  from other
         PDP-10 systems more efficently using image type (below) if  the few
         characters which are translated by ASCII translation are  unused in
         the file, since  our character code is  almost the same as  that of
         other PDP-10s.  ASCII transfers of local files will  also eliminate
         the E directory or SOS line numbers, if any.

ASCII    is an abbreviation for TYPE A.

TYPE I   Image type means that the  file is taken as a continuous  stream of
         bits and sent  accordingly.  The number of  bits sent at a  time is
         determined by the byte size set with the BYTE command (below).  The
         most efficient byte size for us  is 36, the size of a  PDP-10 word.
         Any  byte  size  which is  a  factor  of 36  can  be  used  with no
         difficulty, if needed to accommodate some other system.  Byte sizes
         of 8 or 32, however, cause extreme inefficiency because  some bytes
         are split between two PDP-10  words.  If you are retrieving  a file
         from an 8-bit or 32-bit system, you might want to use TYPE L (local
         byte), which uses only the  first 32 bits of each PDP-10  word, and
         can   therefore   be  implemented   using   the   normal  ILDB/IDPB
         instructions.  However, sending  a file to  such a system  in local
         byte type will lose bits 32-35 of each word.

IMAGE    is an abbreviation for TYPE I.

TYPE L   Local  byte type,  as explained  above, treats  the file  as normal
         PDP-10 bytes  of the size  specified in a  BYTE command.   For byte
         sizes which are a factor of 36, this is treated exactly the same as
         image type (above); for byte size 8 or 32 it uses only bits 0-31 of
         each PDP-10 word.   Byte size 32 is  more efficient than 8  in this
         type.

LOCAL    is an abbreviation for TYPE L.

TYPE P   ASCII print type is treated  by our system the same as  ASCII type.
         This isn't right, but the protocol is not consistent about  what to
         do.  Some people  interpret this type  as indicating that  the file
         contains FORTRAN style format control characters.

TYPE E   EBCDIC type is not  implemented here.  It is used  for transferring
         text  files  between two  IBM  systems.  To  transfer  a  text file
         between here  and an IBM  system, use TYPE A;  the IBM  system will
         translate between ASCII and their local character code as needed.

TYPE X   This command to our FTP user program does not correspond to  a real
         data type in the protocol.   Instead, it is treated as  TYPE L here
         but  tells the  other  end TYPE I.   Use  this command  if  you are
         talking to an  8-bit machine and want  to use local byte  type, but
         the other machine does not accept the TYPE L command.

BYTE n   n is  a (decimal) number  indicating the byte  size of  the network
         data connection.   Data will be  sent from one  host to  another in
         bytes of this size, for  image type and local byte  type transfers.
         ASCII transfers always use a byte size of 8.  (That is,  each 7-bit
         local character code is translated into an 8-bit network ASCII code
         and  vice versa.)   The allowable  byte sizes  are 8,  32,  and any
         factor of  36 (1,  2, 3,  4, 6, 9,  12, 18,  36).  In  general, the
         largest byte size  which will work  is the most  efficient.  (Note:
         the protocol specifies  that it is  the responsibility of  the user
         FTP  to  ensure that  8-bit  bytes are  used  for  ASCII transfers.
         Accordingly, our user FTP  program does not necessarily  transmit a
         BYTE command as soon as  the user types it; instead, the  byte size
         in the  command is remembered  for use in  binary transfers,  and a
         BYTE command is  sent to the FTP  server whenever necessary  as the
         transfer  type  changes.   Our  server  FTP  program,  despite  the
         protocol, also  remembers and restores  the non-ASCII byte  size in
         effect just in case some other user program goofs.)

USER x   x is a string which the foreign host will recognize as a valid user
         description, user name, or ppn.  Not all hosts require a user name.
         If the server requires a password to complete the  login procedure,
         the user  program will ask  for the password  and turn  off echoing
         while you type it.  Not all hosts require a password.

LOGIN x  is a synonym for USER.

ACCT x   x is  an account  number.  Some  hosts may  require this  for their
         billing/accounting purposes.

XCWD x   x is a user name, as in the USER command, which will be used as the
         default directory for foreign  file specifiers; the effect  is like
         the ALIAS monitor command here.  The command name stands for change
         working directory.

ALIAS x  is a synonym for XCWD.

RETR x←y This command retrieves a file from the foreign host.  x is  a local
         file specifier,  and y  is a foreign  file specifier.   The foreign
         file y is copied to the local file x.  Current settings (or default
         values) are  used for  byte size and  representation type.   The x←
         string is eaten locally, and the RETR y part is transmitted  to the
         foreign host.

GET x←y  is a synonym for RETR.

STOR x→y STOR  means store,  and this  command is  the inverse  of  the RETR
         command.  A local file is copied to a foreign host.

SEND x→y is a synonym for STOR.

APPE x→y This command will append the  local file to the end of  the foreign
         file.

PICKUP   This command is used to resume an interruped multiple file transfer
         and is explained further below.

LPPN     This  command   sets  the  local   PPN  flag,  which   affects  the
         interpretation  of  single-pathname  transfer  commands;   see  the
         section on multiple file transfer, below.

RPPN     This  command  clears  the  local  PPN  flag,  which   affects  the
         interpretation  of  single-pathname  transfer  commands;   see  the
         section on multiple file transfer, below.  (The command name stands
         for remote PPN.

MAIL x   x is a user ID (like our PPN).  Following this command you may type
         in a  message which  will be mailed  to the  specified user  at the
         foreign  host.   The  message  must  be  terminated  with   a  line
         containing only a period.  The  MAIL program (see Appendix 4)  is a
         better way to send network mail.

MLFL x→y In this case x is a  local file specifier, and y is a  foreign user
         ID.  The text of the specified file will be mailed to the specified
         user.

LIST x←y y is  a foreign pathname,  possibly including wildcard  terms.  The
         directory listing of the specified pathname is stored in  the local
         file x.

DIRECT   is a synonym for LIST.

NLST x←y is like  LIST, but the  listing returned is  guaranteed to  have no
         extraneous information  in it, simply  one full pathname  per line.
         This listing is intended to be read by programs rather than humans,
         but if you really want it...

HELP     This command  asks the foreign  FTP server to  send back  a message
         indicating what commands it takes, etc.

STAT x   If x  is omitted,  this command asks  the FTP  server to  send back
         information regarding the FTP connection, e.g., socket numbers.  If
         x is a directory name at  their host (like our PPN), it  lists that
         file  directory.    Note:  contrary   to  protocol,   most  servers
         (including ours) treat a STAT  with no argument as a request  for a
         listing of the directory specified in the USER or XCWD command.

DELE x   x is a  foreign file specifier.  The  specified file is  deleted at
         the foreign host.

RNFR x   x is a  foreign file specifier.  This  command is short  for rename
         from; it must be immediately followed by a RNTO.

RNTO x   x is  a foreign  file specifier.  This  command completes  the file
         rename  operation  started  by  RNFR.   (Some  hosts  accept  * for
         wildcard specification in these commands.)

QUOT x   x is  any character  string, which  should be  an FTP  command with
         arguments.  The string is sent as is over the FTP control link (see
         protocol, NIC 10596, for terms).  QUOT was included to allow you to
         execute commands which are as yet unimplemented here, or  which are
         nonstandard, specific to some  serving host.  It will be  of little
         use for those commands which require some special action by the FTP
         program at this end.

BYE      Terminate connections with the foreign host and quit.

QUIT     is a synonym for BYE.

DISC     is a synonym for BYE.

XIND x   x is a local file  specifier.  The file will be read  and processed
         as FTP commands.
                    ARPA Network: Multiple File Transfer


The RETR and STOR commands have some provisions for more convenient transfer
of groups of  files when similar  names are used  at both ends.   The normal
format of the commands requires the user to specify two file names,  one for
our local file system and the other for the remote host's file  system.  Our
FTP knows enough about the  filename syntax for certain systems  (mainly the
PDP-10  systems: ITS,  TOPS-10, and  TENEX) to  be able  to extract  a local
filename from a remote one.

If only one filename  is given in a RETR  or STOR command, it  is considered
the remote file  name, and is  also scanned to  determine a local  file name
under the following rules:

     1.  A "token" in these rules means a string of letters, digits, and the
     characters - and @.   An asterisk (*) may be  used alone as a  token to
     indicate wildcard file groups, as explained below.

     2.  A token enclosed in brokets (< and >) is ignored.  A token,  or two
     tokens separated by a comma,  enclosed in square brackets ([ and  ]) is
     ignored in the normal (remote PPN) mode, but see below.

     3.  Any characters  following a semicolon  (;) are ignored,  except for
     the ITS  systems at MIT  (MIT-AI, MIT-ML, and  MIT-DMS), for  which the
     token preceding the semicolon is ignored.

     4.  A token followed by a colon (:) is ignored.

     5.  A  single non-ignored token  is taken as  the local  filename.  Two
     such tokens separated by a period (.) or separated only by one  or more
     spaces are taken as the local filename and extension.  The characters -
     and @  in a token  are ignored, and  the token is  truncated to  six or
     three characters  for the local  filename or extension.   (The leftmost
     six or three characters are used.)

     6.  No punctuation characters may appear in the filename  string except
     the ones mentioned above.  Spaces may be used anywhere except  within a
     token.

The FTP program notifies the user whenever it determines the local file name
from the remote one in this way, and, in the case of RETR, checks to  see if
that file already exists  before writing it.  If  there is such a  file, the
user is told so and can choose from these options:

     Type <cr> to overwrite the file.

     Type <lf>  to overwrite the  file and to  suppress further  warnings of
     this kind for the remainder of the FTP connection.

     Type <alt> to abort the transfer.

     Type another filename to write a different local file.

If this syntax is used, the implied local device is DSK and the  implied PPN
is the user's alias.   (Note that device and  PPN fields in the  remote file
specification  are ignored  for local  file purposes.)   To use  a different
device or PPN the local=remote syntax must be used.

A  local  filename  or extension  of  *  either in  an  explicit  local file
specification  or as  determined from  the remote  specification is  used to
request the  transfer of more  than one file  by a single  command. Wildcard
device or PPN  is not allowed.  If  an explicit local file  specification is
used, it should agree with the remote file specification in which components
are wild, e.g., the command

RETR *.EXT=<THEIRDIRECTORY>FILE.*

will store any file(s) retrieved with local filename FILE.EXT,  probably not
the desired  effect.  Note  also that an  explicit local  file specification
with no filename or extension implies *.*, so the command

RETR [PRJ,PRG]←REMOTE.FILE

will be treated  unnecessarily as a multiple  retrieve.  This will  work but
will involve unnecessary operations.  The desired effect can be  obtained by
repeating the filename:

RETR REMOTE.FIL[PRJ,PRG]=REMOTE.FILE

but if several such  commands are to be used,  it is more convenient  to set
the local PPN flag using the LPPN command.  When this flag is set, a command
of the form

RETR REMOTE.FILE[PRJ,PRG]

is parsed  with the  text in  brackets interpreted  as a  local PPN  and not
passed on to the remote host.  That is, rule 2 above is replaced with:

     2a.  A token enclosed in brokets (< and >) is ignored.  A token, or two
     tokens separated by a comma,  enclosed in square brackets ([ and  ]) is
     used as the local PPN (it must  be a valid one) and is not part  of the
     remote file name.
The local PPN flag can be reset (returning to remote PPN mode) with the RPPN
command.  LPPN and RPPN take no arguments.

In the case  of multiple STOR,  the selected files  are found in  the user's
local file directory and a  STOR operation is performed for each  file found
which matches the  template.  The remote  file specification is  scanned for
each operation and  the character * is  replaced wherever seen by  the local
filename  or extension.   (The first  * is  replaced by  the  local filename
unless the character . (or, for ITS hosts only, space) precedes it, in which
case the  local extension  is used.   A second  * is  replaced by  the local
extension.)   If  the end  of  the  specification line  is  seen  before any
replacement has  been done,  the local filename  and extension  are inserted
before the carriage return as if *.* had been seen there, so that  a command
like

STOR *.SAI=<DIRECTORY>

will work.  In this situation  the filename and extension will  be separated
by a space  for ITS hosts or  a dot otherwise.  No  great effort is  made to
ensure the syntactic correctness of the resulting remote file specification;
presumably the remote host will complain if necessary.

For a multiple RETR, the remote file specification is used exactly  as typed
in an NLST operation, the results  of which are saved by the FTP  program to
be used  in successive RETR  operations.  Note that  the string used  as the
NLST argument  starts immediately after  the =  or ←, if  any, or  after the
space terminating the  RETR or GET command  name.  In particular,  any extra
spaces will be  sent to the remote  host.  The remote file  specification in
the typed command  is not used to  determine local file names;  instead, the
rules above are applied to each remote file specification received  from the
NLST operation.  If an explicit  local filename or extension is  provided by
the  user, it  will  be used  instead of  the  one derived  from  the remote
filename, as in the command

GET *.TXT=<IGNORED>*.THIS-NAME-IS-REPLACED-BY-TXT-LOCALLY

Multiple RETR depends on the remote host implementing NLST.  At present this
command is implemented in TENEX  systems but not ITS.  TOPS-10  systems vary
in which commands they implement.  Other systems may have a  filename syntax
which does not follow the rules above, in which case none of the features in
this section will work.

The PICKUP  command can  be used to  continue a  multiple transfer  which is
interrupted either by a transient network failure or by a user  error (e.g.,
attempt to write into a  protected file).  The command permits  the transfer
to be re-entered along with the (local) name and extension of the first file
actually to be transfered.

Suppose  that you  are  trying to  copy  a complete  directory  from another
system, let's say a TENEX, so you give the command

RETR <FOO>*.*

After several files have been retrieved, the connection is broken,  while in
the  middle  of  copying  <FOO>PARTIALLY.COPIED  into  PARTIA.COP   in  your
directory.  You re-establish the connection, and type

PICKUP PARTIA.COP

at which point you are invited to repeat the RETR command, which will ignore
all files presented by the  remote host until one comes along  which matches
the name PARTIA.COP, at which point it begins actually reading files.

If the multiple transfer is stopped because of an error which does not break
the network connection, so you can continue using the same FTP, you can give
the  PICKUP command  without a  filename argument,  in which  case  the last
filename for which a transfer was attempted is used.  Also, after the PICKUP
command, you can  just type <return> instead  of repeating the STOR  or RETR
command,  and  the last  such  command  given will  be  repeated.   The last
transfer must have been a multiple STOR or RETR.

If the PICKUP  command line ends with  <alt> instead of <return>,  the first
file transfered will be  the one after the one  in the argument (or  the one
after the one remembered from the aborted transfer).  This is useful for the
case of a transfer which  cannot be done because of a  protection violation,
when  you want  to continue  the multiple  transfer, skipping  the protected
file.  In a situation like that, you may not know the name of the first file
you want to transfer, but only the  name of the last file you don't  want to
transfer.

If a PICKUP command is given after a transfer which is not multiple  but for
which an implicit local filename was used, e.g.

RETR <FOO>FILENAME.EXTENSION

which implicitly  specifies FILENA.EXT  as the local  name, then  the PICKUP
command with no argument can be used to repeat the transfer.
                  ARPA Network: Connection Error Messages


CONNECTION HAS BEEN CLOSED

This  means  just  what  it  says.   The  host  has  voluntarily  broken the
connection for reasons known only to himself.

RESET RECEIVED FROM HOST

The host  has sent us  a reset command  which directs our  NCP to  break all
connections  to  this host  and  clear  our tables  of  everything  it knows
(regarding previous connections)  about this host.   Some hosts will  send a
reset the  first time you  connect to them  as standard procedure.   In this
case, trying again  will succeed.  In the  more normal case, this  means the
host has crashed and just been brought up again.

HOST DEAD

This means that the RFC got to the host's IMP, but was not read from the IMP
within 90 seconds, and the IMP timed out.  This generally means the  host is
really down.

DATA QUOTA OVERFLOW

The host is  not conforming to  protocol and has sent  us more data  than we
allocated him.  We are breaking the connection.

END OF FILE

Doesn't occur in normal circumstances.

SOCKET IN USE

Generally happens after an aborted attempt to connect to someone else.  This
means the foreign  host suddenly sprang to  life after TELNET timed  out and
sent us an  RFC from a different  socket than he told  us he has  now.  This
cures itself in a few minutes.

CAN'T CHANGE SOCKETS
SYSTEM ERROR
NO LINKS AVAILABLE
ILLEGAL BYTE SIZE

These all indicate horrible system errors of one form or another  and should
not happen.

IMP DEAD

The  interface has  begun  to malfunction,  the network  control  center has
brought the IMP down,  or someone here has  given the magic UUO  that brings
the IMP software down.

HOST NOT RESPONDING

One of the  various timeouts inside TELNET  or the system went  off.  TELNET
times out generally when a message is sent to the foreign host which demands
a response and no response was received within a "reasonable" time.

The following  messages appear  only in  conjunction with  one of  the above
messages and indicates only the point in TELNET where the error occurred.

CAN'T CONNECT TO LOGGER

The error occurred on the initial RFC to get the foreign host's LOGGER.

DIDN'T GET SOCKET NUMBER FROM LOGGER

We exchanged RFC's  with the foreign host's  LOGGER, but somehow he  did not
send us a socket number.

CAN'T CONNECT TO RECEIVE SIDE

We got a  socket number from  the LOGGER and tried  to open a  connection on
that socket when the error occurred.

CAN'T CONNECT TO SEND SIDE

We got the socket number and successfully sent an RFC to the receive socket,
but we hit an error when trying to send an RFC to the send socket.

ERROR WHILE WAITING FOR RECEIVE SIDE

This means that we successfully sent RFC's to the send and  receive sockets,
but we got an error while waiting for the return RFC on the receive side.

ERROR ON OUTPUT
ERROR ON INPUT

These are given after the connection is established and refer to errors that
occurred while doing output or input.
                  APPENDIX 9--CARE AND FEEDING OF DEVICES
               Care and Feeding of Devices: The Line Printer


On the  front of  the line printer  (LPT) there  are several  buttons (STOP,
START,  TOP OF  FORM, MANUAL  PRINT, TEST  PRINT, OFF,  and ON)  and several
indicators.  The normal state of  the line printer is with the  START button
lit and all red indicators off.  (TOP OF FORM is always lit.)

If the system or  the spooler reports that  the line printer is  hung, check
the following things.  If the START  button is not lit and there are  no red
indicators, push the START button.  If there are red indicators, NO PAPER or
PAPER LOW ALERT lit,  then you have to put  in more paper (or fix  the paper
that has gone astray).

To reload the paper, find someone who  knows how to do it and watch  him, or
do it  yourself.  Reloading the  paper is fairly  obvious.  The  front cover
(which includes a transparent section)  is hinged at the top; lift  it.  The
yoke is the assembly which carries the ribbon, the printing drum  (which you
can't see) and a rotating disk  at the left side.  Open the yoke  by finding
two toggle switches (one with each hand) and pushing them both  down.  These
switches are located to the left  and right of the yoke and below  it.  They
are each labeled CLOSE  - OPEN.  The yoke will  stop when it is  fully open.
Find four  paper tractors,  two above  the printing  hammers and  two below.
Each tractor has a sprocket wheel (which pokes through the holes in the edge
of the  paper) and a  retainer which holds  the paper against  the sprocket.
Open all the tractors.  If the paper is perforated for 8.5 inch  wide pages,
be sure that the perforation is  closer to the right side.  Push the  TOP OF
FORM button before loading the new paper.  Use the black arrows to align the
"concave" fold.  The concave fold  is the one where the two  adjacent sheets
are  front to  front when  folded.   Close the  four paper  tractors  so the
sprockets fit into the holes in the paper.  Close the yoke by  finding those
two switches and pressing up on both of them.  Push START.

Always restart the fan-fold at the  back of the LPT so the paper  will stack
properly.

The line printer logic can become hung.  This condition is identified by the
MANUAL PRINT light being on continuously.  Push MANUAL PRINT and  then START
to clear this condition.  If that fails, open the door on the right side and
push the black button labeled RESET.  If that fails, find a wizard.

If the ALARM STATUS  light comes on or if  the printer starts making  a loud
buzzing noise,  shut off the  printer (push OFF)  and find a  wizard.  (This
light may come on briefly when the printer is being turned on.)

The YOKE OPEN light comes on when the yoke is open while the paper  is being
changed.  When the yoke is closed it should go off.

The printer  has a  ribbon that  can be changed  too.  It  is best  to watch
someone do it before trying it yourself.
                   Care and Feeding of Devices: DECtapes


To mount a DECtape, first assign an available drive.  Drives  are identified
to the system  by a rotary switch  labeled 1,2,...,8 corresponding  to DTA1,
DTA2, etc.  Although there are eight numbers on the switches, there are only
four drives, and the system  will not recognize DTA5 and up.   Generally you
should have no reason to change the normal setting of these switches.  Place
your tape on the left reel of the drive and thread the tape over the  top of
the tape guide and head assembly.   Wind several turns of the tape  onto the
takeup reel (turn the reel clockwise).  Finally flip the OFF-WRITELOCK-WRITE
switch to WRITE LOCK, or if you want to write, to the WRITE position.

To unload  the tape,  wind the  tape off  the takeup  reel by  the direction
switch (push it to the left and  hold it).  Turn the drive off when  all the
tape is on the left reel.  Grasp the reel firmly and pry it off the hub.
                Care and Feeding of Devices: Magnetic Tapes


First, decide whether you want to  write on the tape or not.  If  you intend
to write, place one of  the plastic write-enable rings in your  tape.  Place
your  tape on  the top  hub and  twist the  handle in  the hub  clockwise to
tighten the reel to the hub.   (You can really lose if you don't  tighten it
all the way!)

Between the two reels there is a three-position switch labeled START-BRAKES.
Move the switch to the right and hold it there to release the brakes  on the
hubs.  Unwind the tape  until the end of the  tape is about a foot  from the
floor.  Carefully  thread the tape  into the slot  between the reels  to the
left of the brake release switch.  Wind the tape onto the bottom  reel (wind
the reel clockwise).   You must be holding  the brake release switch  to the
right to  wind the tape.   Wind several  feet of tape  onto the  takeup reel
until you see the metal foil  load point marker go by.  Then push  the brake
release switch  to the left  (the START position).   The tape will  hiss and
spin.  Hold the switch in START until all motion stops.

There  are some  control buttons  on  the top  panel.  One  is  labeled (and
lighted) REMOTE-LOCAL; this button toggles.  In LOCAL mode, push  the REWIND
button.  If  you're not  sure that  you have  the load  point marker  on the
takeup reel, push  the FORWARD button for  several seconds to wind  the tape
forward onto  the takeup reel  until it passes  the load point  marker, then
REWIND.  REWIND positions the tape  at load point.  Set the drive  in REMOTE
and it is all set to use.

Unloading the tape is simple.  In LOCAL mode, push the REWIND  button.  When
the tape finished rewinding, push the brake release switch and manually wind
the tape onto the top reel.  Unscrew the hub and remove the reel.

The magnetic  tapes are quite  finicky and the  system software  is somewhat
flaky.  There are several  things that you can  do with mag tapes  that will
upset the timesharing  system and require the  intervention of a  wizard who
will be angry at you for  disturbing his slumber.  Never stop your  job when
it is operating the tape by typing CALL.  Instead, the job can be stopped by
causing the magnetic  tape to appear hung.   This is done by  switching back
and forth between REMOTE and LOCAL until the system stops the job.

There is a reset button for  each tape drive located behind the  small front
panel  below  the  drive  mechanism.  This  button  clears  all  tape motion
functions in a reasonable way.
            Care and Feeding of Devices: Xerox Graphics Printer


The normal condition of the XGP  is indicated by the green ON light  and the
orange READY light being on.  If all indicators are off, the XGP  main power
has been shut off inside the cabinet, possibly for some reason.

If the red OFF light is on,  push the ON light.  This will turn the  XGP on,
unless some abnormal condition obtains, such as a paper jam near the cutter.

If  the  orange STANDBY  light  is on,  look  inside the  panel  above these
indicators.   The  following  is  the normal  state  of  the  indicators and
switches within:

        Knobs:  TEST PATTERN:           OFF
                VERTICAL POSITION:      leave this one alone

        Lights that should be on:
                All POWER SUPPLIES lights
                        (except 10kv and 2.5kv lights will
                        be off any time there is some other
                        problem)

                All PROCESS INTERLOCK lights

                All CONTROL LOGIC (except IN SYNC)

        Lights that should be off:
                All SUPERVISORY SIGNALS
                FAULT
                IN SYNC

Certain conditions of the XGP are indicated by lights being OFF.  (If any of
the conditions listed below obtains, the 10kv and 2.5kv power  supplies will
shut off.)

        FWT     Fixed wait timer has not run long enough after 
                being turned on.  Wait 2 minutes.

        FUSER   The fuser is not hot enough.
                If the XGP has just been turned on, wait 5 minutes;
                otherwise, reset the over-temperature sensor.
                The over-temperature sensor is reset by a small
                black button located somewhere in the middle of the
                fuser wick assembly.

        WEB CLEAN
                The drum cleaning web must be replaced.

        PAPER OUT
                Load more paper.

        DRUM    The drum assembly has been disengaged.

        SWEEP PRESENT
                The interface is not providing a sweep signal.
                This may mean the connector is unplugged or the
                interface turned off.

To load a  new roll of paper,  open the left door  of the XGP.   Unscrew the
roll retainer and remove the old roll.  Unwind a foot of paper from  the old
roll and then cut  the paper at the roll.   Mount the new roll and  tape the
front end of the  new roll to paper separated  from the old roll.   Make the
leading edge  of the joint  as smooth as  possible.  Using the  MOTOR MANUAL
DRIVE button, advance the splice through the machine until it has passed the
cutter.

If any problems  develop in this sequence,  find a wizard.   Beware: certain
parts of the XGP are hot; you can be painfully burned if you touch the wrong
things.

There is a drum cleaning web that runs out at inconvenient times.   There is
a small diagram inside the XGP explaining how to change the web.

Toner is icky black stuff that  makes the marks on the paper.  It  gets used
up and runs out too.  Someone  is supposed to check the toner every  day and
add more if it gets too low.   If the XGP runs out of toner, the  pages will
start  getting lighter,  there  will be  occasional black  splotches  on the
paper, and frequent sand-like particles will be found embedded in the paper.
Toner is checked through the access panel in the back of the XGP.   There is
a lever there  that adjusts the  rate at which toner  is used on  the paper.
This lever  must be  placed either at  the lightest  (inner) setting  or one
setting darker.  Never, never set it anywhere else.

If you  don't like  the copy quality,  complain to  a wizard.   Don't adjust
things yourself.
                Care and Feeding of Devices: User Disk Pack


One or more of the drives in the Ampex disk system are usually  reserved for
private disk  packs.  The drives  so designated will  be labeled  USER PACK.
Use the command  ASSIGN UDPn to assign  a particular drive before  you mount
your pack.

Assuming  there is  no pack  mounted  already, you  can mount  your  pack by
following this  sequence.  Make sure  there is nothing  on top of  the clear
door of the  drive you are  using.  Then push  the OPEN DOOR switch  and the
door will  swing up.   Hold your  pack by the  handle on  its top  cover and
remove the bottom cover  from the pack by  squeezing the two handles  on the
bottom together.   Place the bottom  cover on  top of the  back part  of the
drive cabinet.  Place the pack (still  in the top cover) in the  drive unit.
Turn the handle clockwise.  It will be somewhat hard to turn.  Turn until it
stops.  Carefully remove  the top cover  from the pack  and place it  on the
bottom cover.  Make sure the two covers are aligned to keep dust out  of the
enclosed space.  Turn the top cover  so the label on it is visible  from the
front of the drive.  Gently push the drive cover down and close  it--it will
lock.  Push  the START-STOP switch  to START; the  pack will begin  to spin.
When the  green ready  light comes  on, the pack  can be  used.  There  is a
READ ONLY-R/W switch on the drive; put this switch in the READ ONLY position
if  you do  not intend  to write  anything on  the pack  and put  it  in R/W
(Read/Write) if you do intend to write on the pack.

To unload the pack, push the START-STOP switch to STOP.  When the pack comes
to a stop, press the OPEN DOOR switch; the door will swing up.  Take the top
cover  whose  label  corresponds to  the  label  on the  pack  and  place it
carefully over the pack.   Turn the handle counter-clockwise until  it moves
freely.  Lift the pack out of  the drive.  Place the bottom cover  under the
pack and press it  on until it latches.  The  covers help keep dust  off the
packs.   Return  the pack  to  the  storage rack.   Leave  the  label facing
outwards.  Gently close the cover on the drive until it locks.

Occasionally, there may be no drives available for user disk packs.  If this
happens, a wizard  will explain why.  Never  touch a disk drive  unit unless
you have it assigned!  Never touch anything but a drive which is marked USER
PACK!  If you  are confused by  something you see,  ask about it  before you
touch!
                 Care and Feeding of Devices: Core Storage


A hardware-detected parity error in  core being used by a user  program will
stop that program but will generally not hurt the system  otherwise.  (There
will be a brief period, while the system is finding the error,  during which
it will not  respond to characters typed  at terminals.)  A parity  error in
the monitor  itself will probably  crash the system.   It is possible  for a
memory error to go  undetected if two bits  are incorrect in the  same word,
but this  should be uncommon.   If a piece  of hardware fails  reliably, the
parity error rate may become too high to allow operation of the system.

Another possible problem  besides parity errors is  a memory stop.   This is
usually a temporary problem.  It will stop the timesharing system, but it is
possible to continue from a memory stop without reloading.

Memory  errors  have  never,  never  been  fixed  by  software   means.   In
particular, reloading  the system never  solves the underlying  problem.  If
the system  becomes unusable  because of  these errors,  a wizard  should be
found.

Memories  stop working  entirely due  to hardware  logic bugs.   There  is a
MEMORY  STOP  light on  the  PDP-10 console,  which  usually  indicates this
problem.  Usually  the memory  can be  reset and  the system  continued.  If
possible, find a wizard to fix  it.  Otherwise, read on.  A hung  memory can
be identified by:

  DEC MG10:AW light off
  new Ampex: UA light off
  new Suppes: OK light off

Push stop on the PDP-6 and the PDP-10.  Reset the memory by:

  DEC MG10:Push RESET toggle switch (inside the front panel)
  new Ampex: Push RESET (the big green-blue  button) on Core 0 and  Core 1
           simultaneously, or Core 2 and Core 3 simultaneously.
  new Suppes: Push, in this order,  the three buttons: STOP,  CLEAR, CONT.
           These are located on the little box on top of the memory.

Once the memory  is reset, the computers  have to be convinced  that nothing
bad happened.  To do this on the PDP-10, the USER MODE light on  the console
must be off.  If  it is on, first turn  on the SINGLE INSTRUCTION  switch on
the console, then push CONTINUE.  This should turn off the USER  MODE light.
Then turn off  the SINGLE INSTRUCTION switch.   When the USER MODE  light is
off, enter 700200 010003 in the data switches and push the EXECUTE  key.  If
the MEMORY STOP light  on the PDP-6 is on,  follow the same procedure  as on
the  PDP-10 with  these exceptions:  Instead  of a  USER MODE  light  on the
console, the PDP-6 has  an EXEC MODE light at  the top of the second  bay to
the left of the console; this light must be on for the execute.  Also, there
is no SINGLE INSTRUCTION switch on the PDP-6; instead, while the INSTRUCTION
STOP switch is down, push INSTRUCTION CONTINUE once.  Finally, push CONTINUE
on both machines.
                     APPENDIX 10--RELOADING THE SYSTEM


If the system  crashes or refuses  to run jobs normally,  it may need  to be
reloaded.  If possible, find a  system programmer, who will try to  find out
what the trouble is.  If there are no system programmers around, look at the
CTY (the PDP-10 console Teletype) to see if instructions have been typed out
about what to do to fix  the current problem.  If no instructions  have been
typed out, check the MEMORY STOP light on the PDP-10 console.  If this light
is on,  look up the  memory stop  procedure just above  in the  Core Storage
section of Appendix 9.  Otherwise, read on.

First, write in the  log your name and the  reason that the system  is being
reloaded.

Find the paper tape labeled  DSKDMP BOOT RIM and mount it in the  paper tape
reader.   (It may  be mounted  already.)  Push  the console  keys  RESET and
READ IN.  After the paper tape has been read in, the CTY should type out:

DSKDMP
*

If the  CTY fails  to say  "DSKDMP", try  reading in  the paper  tape again.
After the CTY has typed out "DSKDMP" and an asterisk, type in:

SYSTEM

(ended  with a  carriage return).   If you're  lucky, the  system  will load
itself without further hassle.

If reloading fails to work and the PDP-6 is running, try again after pushing
INSTRUCTION STOP on the PDP-6.

When reloading is finished and the system is about to come up, if  the PDP-6
is stopped, it must  be started by setting  204 in its address  switches and
pushing the keys INSTRUCTION STOP, IO RESET, and START.

If the system is being loaded  without the PDP-6, then the current  date and
time must be typed in at the CTY during the reloading sequence.  Be sure you
supply the correct date and time!

If loading with DSKDMP fails  repeatedly, find the DECtape with  the current
system.  The DECtape will be labeled with the system name and date  and will
usually  already be  mounted on  some DECtape  drive.  Find  the  paper tape
labeled 256K TENDMP, and load it  into the paper tape reader on  the PDP-10.
Push INSTRUCTION STOP on the PDP-6.  Press RESET and READ IN on  the PDP-10.
The paper tape will be read, and the CTY will type carriage return  and line
feed.  Type n$ where n  is the number of the  DECtape drive and $ is  an alt
mode.  The DECtape should  spin for a while, then  it will stop and  the CTY
will type crlf  again.  Type S and  carriage return.  The DECtape  will spin
again for a while, and then the CTY will type out a message saying start the
PDP-6 at 204.  Do that by  setting 204 in the address switches on  the PDP-6
and pushing  the PDP-6 keys  IO RESET and START.   At that point  the system
should come up.

Note: For  the system  to work,  the following  switches located  inside the
second door  to the  left of  the PDP-10  console must  be in  the indicated
positions: JSYS ENB and MAPAC ENB off, MA TRP OFFSET on.
                    APPENDIX 11--MONITOR ERROR MESSAGES


This appendix lists the error  messages typed by the monitor itself  (not by
other system programs) with explanations for some of them.  Many have  to do
with errors induced by UUOs in your program, and these are explained  in the
UUO Manual, in the writeup  of the UUO involved.  The list  is alphabetical;
messages which start with a  variable part are sorted under the  first fixed
word.

Note: Several of these messages are  of the form XXX at user  <address>.  It
is possible in  some of these  cases to get  XXX at exec  <address> instead,
which means that the offending  instruction was not in your program,  but in
the  monitor,  which was  trying  to do  something  on your  behalf  when it
happened.  If this happens repeatably, or if the message is shortly followed
by a system crash, tell a system programmer.

Address check for Device <dev>

          Your program was trying to use the indicated device,  and supplied
          a  buffer address,  dump mode  command address,  or  other address
          which is outside the bounds of your core image.  For dump mode IO,
          the command list is too long or contains a loop, or the address of
          a word in the command  list is illegal, or the address  pointed to
          by a  word in  the command  list is  illegal (possibly  because it
          points into  a write-protected upper  segment).  In  buffered mode
          IO, the buffer header address is illegal or the buffers themselves
          are improperly formed.

Address out of bounds, UUO at user <address>

          Your program executed a UUO which takes as an argument  an address
          in  your core  image,  and the  address  was out  of  bounds.  The
          address given is that of the offending UUO.

AFTER INPUT, DEVICE DAC CANNOT DO OUTPUT
AFTER OUTPUT, DEVICE DAC CANNOT DO INPUT

          Your program used the DAC (digital-to-analog and analog-to-digital
          converter) in one direction (input or output) and then tried to do
          IO in the other direction.  To change IO direction on the DAC, you
          must first RELEASE it and then INIT it again.

Already assigned to job <job number>

          You typed an ASSIGN command, and the device you wanted is in use.

<terminal> already attached

          You typed an ATTACH command, and the job you are trying  to attach
          is already attached to a terminal.

Already in use - can't change format

          You gave  an ASSIGN  PUBLIC or  ASSIGN PRIVATE  command for  a UDP
          which was already assigned as OLD, or vice versa.  The UDP will be
          assigned to your job in the same mode as before.

Already in use - can't make private

          You gave an ASSIGN PRIVATE  or ASSIGN OLD command for a  UDP which
          was already in  use by another job.   The UDP will be  assigned to
          your job as PUBLIC.

? ambiguous job name

          Your program gave a MAIL UUO which refers to another job  by name,
          and  there are  two or  more  jobs with  that name.   If  you type
          CONTINUE, the UUO will be tried again.

ATTEMPT TO INITIATE SPW JOB WITH ONE ALREADY RUNNING

          Your program has a spacewar  module active and is trying  to start
          another one on the same processor.

Bad directory for Device <dev>

          The device is a  DECtape.  This might mean  that the tape is  in a
          format  not  recognized  by  the  monitor.   (Our  system  uses  a
          different directory format from the PDP-10 standard.)  It can also
          happen if you try to write on a write-locked DECtape.

BAD RETRIEVAL

          The pointers to your file  on the disk are invalid.  See  a system
          programmer to try to fix it.

Buffer too large for Device <dev>; UUO at user <address>

          Your program is trying to use  an I/O device for which there  is a
          limit on the allowable user buffer size, which you  exceeded.  The
          UUO Manual explains the rules for each device.

busy

          You gave a TALK command  addressed to a terminal which is  in user
          mode or has characters in its input buffer.

Can't attach device

          You gave the privileged ATTACH <device> command and don't have the
          DEV privilege.

Can't Attach job

          You gave an attach command from a remote terminal to attach  a job
          you are not permitted to  attach.  From such a terminal,  you must
          be logged in  to attach another job.   If you want to  re-attach a
          job which you have detached, log in, attach it, and kill  your new
          job with the KILL command.

<dev> can't be reassigned

          You gave a REASSIGN command  in which the device to  be reassigned
          was your own terminal.  This is illegal.

Can't continue

          You typed CONTINUE after one of the other error messages came out,
          and you are not allowed to continue the job after that error.  You
          also cannot continue a job after a SAVE or SSAVE.

Can't detach device

          You gave the privileged DETACH <device> command and don't have the
          DEV privilege.

CAN'T ENTER-RENAME MFD

          If you  get this message,  see a system  programmer, who  will eat
          you.

Can't LOCK with segment

          Your program, which has an  upper segment, gave a LOCK  UUO.  This
          is illegal.

CAN'T TERMINATE SOMEONE ELSE'S SOCKET!

          Your program is  using the ARPA network  and tried to  terminate a
          connection which does not belong to it.

Cons trap at user <address>

          You can  only get this  one from a  program running on  the PDP-6,
          which means it must be a spacewar module.  The CONS instruction is
          a nonstandard addition to  our PDP-6 installed for the  benefit of
          LISP people.   It sometimes  gives this  message.  The  address is
          that of the CONS which failed.

CORE DEADLOCK.

          The monitor's free storage  area has expanded enough so  that user
          core is no longer big enough for your core image.  This  might fix
          itself if you wait a  while, but if you must run  immense programs
          your best bet is to come back at 4am.

Couldn't get you a segment.  Will try to let you win with SETPR2.

          You tried running  a program with  an upper segment.   The program
          was loaded into  core, but there is  no room in the  monitor's job
          tables to make an entry  for the upper segment.  The  monitor will
          try to  simulate an  upper segment  for you  by leaving  the upper
          segment code in  your lower segment, but  simulating upper-segment
          relocation by the SETPR2 UUO mechanism.  This ought to work ok for
          most two-segment programs, but just in case it doesn't the monitor
          types this  warning.  If  you are  writing a  two-segment program,
          consult the UUO Manual or a system programmer for advice.

Couldn't unpurify upper.  Continue to try anyway

          You typed a DDT command.   JOBDDT in your core image points  to an
          address in  your upper  segment as the  DDT starting  address, and
          your upper segment is write protected.  DDT and RAID  both contain
          instructions which modify themselves.  The monitor tries  to solve
          this by unprotecting your  upper segment.  If you are  sharing the
          segment with other users, it has to load a new copy for you so the
          other  users still  have a  protected one.   This might  fail, for
          example, because  there are  no job  slots available.   All highly
          unlikely.

<dev> deassigned, but still INITed

          You gave a DEASSIGN command for  a device which is in use  by your
          program.  This is all OK; the monitor is merely reminding you that
          you still control the device.  The FINISH command will release it,
          if that is what you want.

Detached from system

          You gave the PJOB <dev>  command and the device you  specified has
          been made unavailable to users, perhaps because it is not working.

Device <dev> isn't ready

          The device is somehow disabled.  If it's a mag tape, it may  be in
          LOCAL mode.  The line printer could be out of paper.  You  can fix
          the problem and type CONTINUE.

Device <dev> MAY BE UNLOADED

          You gave a DEASSIGN command for  a UDP and no one is now  using it
          so you can unload the pack.

? Device <dev> not available

          The device specified in a RUN, R, GET, SAVE, or SSAVE  command was
          unavailable to your job.

Device <dev> STILL IN USE - DON'T UNLOAD

          You gave a DEASSIGN command for a UDP which is still being used by
          someone.

DISK IS FULL!

          Your program is trying to write  a file on the disk, and  there is
          no room.  If you delete  some files (using another job!),  you can
          type CONTINUE and the file will be written.

DISK TRANSMISSION ERROR

          This is a disk failure.  See a system programmer.

Enter failed.

          The filename you typed to "Enter needed." (see below) didn't work,
          probably because of a protection failure.

? Enter failed

          The file specified in a  SAVE or SSAVE command cannot  be written,
          probably because of a protection failure.

Enter needed.  Please type file name:

          Your program tried to write on the disk or a DECtape without doing
          an  ENTER  UUO  to  specify  the  filename.   You  are  given  the
          opportunity to specify the file to be used.

ERROR IN DSKSER

          Horrible error in the monitor disk service routine.  See  a system
          programmer.

? Error in job <job number>

          This message will appear along  with one of the others.   The only
          reason you might need it is  if you are running more than  one job
          at once (through a PTY, for example).

Error in monitor

          This message is usually followed closely by a system  crash.  Call
          a systems programmer.

File already exists.  Is it OK to delete it?

          The filename you typed in response to "Enter needed."  (see above)
          already exists.  If you type  Y (and RETURN), it will  be replaced
          with  the new  output; otherwise,  you will  be asked  for another
          name.

Finish what?

          You typed a FINISH command with an argument and weren't using that
          device (or there is no such device).

Gotcha!

          This is not an  error.  You get it when  you are in a  device wait
          queue and your turn for the device comes.

Halt at user <address>

          Your program executed a  JRST 4, instruction.  You are  allowed to
          CONTINUE the  job after  this message.  The  address typed  is the
          address  containing  the  HALT  instruction,  not   its  effective
          address.  If you type  CONTINUE, the program will be  continued at
          the address specified in the effective address of the JRST 4,.

Hung Device <dev>

          The device did not respond  properly to your attempt to use  it in
          some predetermined time.  This  probably means that the  device is
          unusable for some hardware reason.

HUNG DEVICE: PDP-6

          Your program  is trying  to run  a spacewar  module on  the PDP-6,
          which is not responding.  Get a system programmer to fix it.

I-level UUO when not at I-level, UUO at user <address>

          Your program  tried to execute  a UUO which  is only allowed  in a
          user interrupt routine, when it was not servicing an interrupt.

ILL MEM REF at user <address>

          Your program tried  to read or write  an address greater  than the
          size  of its  core  image.  The  offending instruction  is  at the
          address typed, or  possibly at one  beyond that address  (e.g., if
          the  error  occurred  on   a  non-final  write  cycle  of   a  BLT
          instruction).

Illegal attach loop

          Your program is typing  into a pseudo-teletype and gave  an ATTACH
          command  trying to  attach  its controlling  job.   In particular,
          people using the system via the ARPA network get this if  they try
          to attach to their TELNET server job.  (You also get it if you try
          to  attach  the  job  controlling  the  PTY  controlling  the  job
          controlling you, etc.)  Typed on the PTY.

Illegal data mode for Device <dev>

          Your program has tried to  use an I/O device in an  undefined way,
          e.g., binary  I/O to  a terminal.  The  UUO Manual  discusses data
          modes for each device.

ILLEGAL DD CHANNEL.

          Your program is trying to use  a Data Disc channel to which  it is
          not allowed access.

ILLEGAL FORMAT DUMP MODE COMMAND LIST

          Your program is trying to  do dump mode I/O incorrectly.   See the
          UUO Manual.

Illegal I-level call, UUO at user <address>

          Your program tried  to execute at interrupt  level a UUO  which is
          not legal at interrupt level.

ILLEGAL INSTR. ADDRESS.

          This message refers to instructions in a display program  your job
          is running.

Illegal instruction at user <address>

          Your program executed an undefined instruction or one which is not
          allowed in user mode.

Illegal old-style access to new format UDP. UUO at user <ADDRESS>

          You have given an ASSIGN OLD command for a UDP, and mounted a pack
          which has been formatted for file-structured use, and your program
          tried to write on the pack (gave an ENTER UUO).

ILLEGAL PAGE SIZE SPEC.

          Your  program  is  trying  to  adjust  the  page  printer geometry
          incorrectly on a display terminal.

ILLEGAL PARAMETER FOR FAST BAND CALL, UUO at user <address>

          Your program  gave a UUO  to use a  Librascope fast band  but some
          argument to the UUO was invalid.

ILLEGAL PIECE OF PAPER

          Your program  gave a PPIOT  UUO which specified  a piece  of paper
          number greater than 17 (octal).  See the UUO Manual.

Illegal protection code

          You gave a SETUWP or CLRUWP command with an argument  greater than
          1000 octal.

ILLEGAL SPEED PARAMETER FOR Device <dev>; UUO at user <address>

          Your  program  tried   to  use  the  DAC   (digital-to-analog  and
          analog-to-digital converter) but specified an illegal speed.

Illegal UUO at user <address>

          Your program executed a UUO which the monitor does  not recognize.
          (Probably you are trying to execute data.)

IMP IO WITHOUT REQUEST FOR CONNECTION

          Your  program  tried  to   IMP  input  or  output   without  first
          establishing a connection to some host.

in use

          You gave the FLUSH command and the specified terminal is in use.

Input Device <dev> cannot do output

          Your program has done something silly like trying to write  on the
          paper tape reader.

Input Device <dev> has no input buffer header, UUO at user <address>

          Your program executed an input  UUO in buffered mode, and  had not
          provided an input buffer header when it opened the device.

Interrupt address out of bounds

          Your  program  has  enabled  user  interrupts  and   specified  an
          interrupt address which is not in your core image.

Interrupt enablings conflict, UUO at user <address>

          Your  program  tried  to  enable  both  old-style   and  new-style
          interrupts in a conflicting manner.

Intgen of non-enabled interrupt, UUO at user <address>

          Your program tried to use the INTGEN UUO to send itself or another
          job an interrupt for which the job was not enabled.

IO to unassigned channel at user <address>

          Your program executed an  I/O UUO specifying an I/O  channel which
          was not opened.  See the UUO Manual about channels and I/O.

<dev> is busy, will you wait?

          Your program tried  to open a device  which another job  is using.
          If you say Y (then RETURN), your job is placed in a queue  of jobs
          waiting for the device,  and will be continued  automatically when
          it's your turn.  If you say N, you are then asked "Would you do IO
          to the disk instead?" and can again say Y or N.  If you say Y, you
          may be asked for a filename (if your program does input  or output
          on that channel without specifying  a name).  If you say  N again,
          your program gets a failure return on the INIT or OPEN UUO.

JMS NOT LEGAL; USE JSR.

          Your program set up a  III display program with the  forbidden JMS
          instruction in it.  See the UUO Manual.

Job capacity exceeded

          The maximum allowable number of users are already logged  in.  Try
          again later.

LINKS STILL ACTIVE

          Your program tried to re-initialize the system IMP tables in order
          to bring the IMP back up and someone else is still using the IMP.

Logical name already in use, <dev> Assigned

          You typed an  ASSIGN command with  a logical device  name argument
          which you were already  using for another device.  The  device you
          requested  is assigned  to your  job, but  the logical  name still
          refers to the old device.

Login please

          You typed a command which requires that you log in first.

Lookup failed.

          The filename you typed in response to "Lookup needed." (see below)
          could not be read.  (It doesn't exist or is read protected against
          you.)  You get to type in another name.

Lookup needed.  Please type file name:

          Your program  tried to  read from  the disk  or a  DECtape without
          specifying a file  by executing a LOOKUP  UUO.  You are  given the
          chance to specify the file to read.

MESSAGE LENGTH NOT CONSISTENT WITH BYTE SIZE, UUO at user <address>

          Your program is doing input from the IMP and some host sent  you a
          message with an explicit length greater than the actual  amount of
          message received.

Must assign Device <dev>; UUO at user <address>

          Your program tried to INIT a UDP which hadn't been  ASSIGNed.  You
          must give the ASSIGN  command to set the  mode of pack to  be used
          before you can use a UDP.

NEED ENTER BEFORE OUTPUT
NEED LOOKUP BEFORE INPUT

          You get these messages  if your program opens a  directory device,
          closes  a file,  and then  tries  to do  input or  output  on that
          channel without another LOOKUP or ENTER.

No <dev>'s available

          You  typed an  ASSIGN command  with a  generic device  name (e.g.,
          MTA), and all of them are in use.

No core assigned

          You typed a command which  refers to your core image (e.g.,  DE or
          START), and you don't have a core image.

No DDT

          You typed a DDT command, and your core image does not  contain DDT
          or RAID (JOBDDT zero).

No Reenter address

          You gave a REENTER command and your program has no REENTER address
          (JOBREN is zero).

No starting address

          You  gave  a START,  R,  or RUN  command  and the  program  has no
          starting address (JOBSA zero).

No such device

          You typed something  the monitor did  not recognize when  a device
          name was required.

No such job

          You gave an ATTACH or kill command with a nonexistent job number.

No such privilege

          The privilege name specified in an ENABLE or DISABLE  command does
          not exist.

No upper segment

          You typed a SETUWP or CLRUWP command and your core image  does not
          include an upper segment.

? Non-ex job name or number

          Your program gave a MAIL  UUO addressed to a nonexistent  job.  If
          you type CONTINUE, the UUO will be tried again.

Non ex mem at user <address>

          This can't happen, it says here.  It means that your program tried
          to address a word of core storage which does not  exist.  However,
          we have the maximum possible amount of core, so there shouldn't be
          any  nonexistent  addresses.  Possibly  a  hardware  failure could
          cause this.  (If  you are running  a spacewar module  which resets
          its relocation  and protection registers  when for some  reason we
          are running with  less than the full  amount of core, you  can get
          this legitimately.)

? not a dump file

          The file specified in a RUN, R, or GET command is not in dump file
          format.

NOT A NEW FORMAT UDP

          You have typed  an ASSIGN PUBLIC or  ASSIGN PRIVATE command  for a
          UDP,  and  mounted  a  pack  which  has  not  been  formatted  for
          file-structured use.  The error is not detected until your program
          tries  to  perform  some  operation  on  the  UDP.   See  a system
          programmer about formatting your pack.

Not a TTY

          You gave the FLUSH command with an argument which is not  the name
          of a terminal.

Not enough core

          You typed a CORE command with an argument greater than the maximum
          core available to a user job.

? <filename> not found

          The file specified in a RUN, R, or GET command was not  found.  If
          the  problem  is not  a  spelling  error, make  sure  you  are not
          aliased.

Not one of your jobs

          You typed a KILL command  with a job number not belonging  to your
          programmer name.

Out of bounds

          Some numeric  argument to  a monitor  command wasn't  right.  This
          could be an address not in your core image in a DE or E command.

Output Device <dev> cannot do input

          Your program has  tried to do something  silly like read  the line
          printer.

Output Device <dev> has no output buffer header, UUO at user <address>

          Your program executed an output  UUO in buffered mode and  did not
          provide a buffer header when it opened the device.

? <n> pages of core needed

          You tried to run a program  and asked for less core than  it needs
          to run or  for more core  than a single  job can have.   In either
          case, <n> is the minimum amount of core (in 512-word pages) needed
          to run the program, unless the program was on a mag tape, in which
          case <n> is the amount of core you asked for and is more  than you
          can have.

Parity error in your core image at location <address>
Parity error in your upper segment at location <address>

          A hardware failure has  invalidated the contents of  the indicated
          address in your core image.   The safest thing to do in  this case
          is to  restart with  a fresh copy  of your  program.  If  you were
          running for a  long time and are  willing to risk  continuing, you
          can type CONTINUE.  You can also try to fix the bad  location with
          DDT or RAID, if present, or with the DE and E commands.

PC exceeds mem bounds at user <address>

          Your program tried to jump to an address outside the range of your
          core  image.  The  message, unfortunately,  tells you  the illegal
          address rather than the address of the jump instruction.

Pdl ov at user <address>

          Your program had a  pushdown list overflow.  The address  typed is
          the effective address of a PUSHJ, the return address for  POPJ, or
          the address following a PUSH or POP.

PIECE OF GLASS TOO BIG

          Your program is trying to  run a display program which is  too big
          for the monitor to handle.  Sorry.

Please Kjob or Detach

          You gave a LOGIN command when you were already logged in.

Please type ↑C first

          You started  your program with  CSTART or CCONTINUE,  leaving your
          terminal in monitor mode,  and then typed a command  which affects
          your  core image.   Such commands  cannot be  processed  while the
          program is running.  Type CALL and try again.

PPN mismatch

          You typed an ATTACH command, and the job number and  PPN arguments
          did not agree.

Protection failure

          You typed  a SETUWP or  CLRUWP command, and  are not  permitted to
          change the write protection of your core image's upper segment.

? SAVE/GET IO error

          You got an IO error from trying to save or get a core  image.  Try
          again.  If it still fails, ask a wizard for help.

Spacewar lossage - <error>

          The error indicated can be "Ill mem ref", "PC exceeds mem bounds",
          "Non ex mem", "Pdl ov", "Cons trap", or "Time out".  It means that
          your job  started a  spacewar module (see  the UUO  Manual), which
          caused the error.  "Time out" means that your spacewar  module did
          not have the timeout-suppression  bit set and used up  the maximum
          amount of  uninterrupted time  allowed in a  single run.   For the
          other errors, see the particular error message in this list for an
          explanation.

SWAP READ ERROR

          Your job was  swapped out of core,  and when the monitor  tried to
          read it back in, there was a hardware error on the  swapping disk.
          Your core image is probably  gone forever.  If you really  need it
          badly, you might be able to persuade a system programmer to try to
          recover it for you, but even then there's not much  chance.  Start
          over.

Too few arguments

          This  error  message can  be  typed by  several  different monitor
          commands and should be self-explanatory.

TOTAL DPY BUFFER SPACE EXCEEDED.

          Your program is trying to run a III display program, and  there is
          no more room in your allocation of display buffer space.

UDP OFFLINE OR WRITE LOCKED

          Your program  has tried to  perform some operation  on a  UDP, and
          there is no  pack mounted, or  the drive is  not turned on,  or it
          does not have its  ID plug inserted in  the front panel, or  it is
          switched to read-only and your program tried to write on it.

(Upper not saved)

          You gave a SAVE command  and you have an upper segment;  SAVE does
          not include the upper segment  in the dump file written.   To have
          the upper saved  also, use the SSAVE  command.  (You can  give the
          SSAVE command after getting  this message from SAVE if  you decide
          you want the upper saved too.)

Use "KJOB" to log yourself out

          You typed a KILL command with your own job number as the argument.

$$ USER DPY ERROR AT <address>

          This message comes along with another which explains the  error in
          your  display  program.   The address  is  that  of  the offending
          instruction.

User Interrupt-Level <error>

          The  error can  be "ill  mem ref",  "NXM", or  "pdl ov".   See the
          associated message in this list for an explanation (see Non ex mem
          for NXM).  The error happened in your program's interrupt routine.
          If it says "CH3 error" instead  of one of the above, see  a system
          programmer.

User Interrupt-Level attempt to schedule, UUO at user <address>

          Your program's interrupt routine executed a UUO which would put it
          in a  wait state.   User interrupt routines  aren't allowed  to do
          that.  See the UUO Manual.

User Interrupt-Level timeout

          Your  program's user  interrupt routine  has run  longer  than the
          maximum time allowed.  (No  other user can run while  an interrupt
          routine is  in progress, which  is why they  are limited  in time.
          See the UUO Manual about interrupts.)

UUO at user <address>

          This line appears with  certain other messages.  It tells  you the
          location in your  core image of  the instruction which  caused the
          error.

<dev> wasn't assigned

          You gave a  DEASSIGN or REASSIGN  command and hadn't  assigned the
          device.

wasn't detached

          You  gave  the privileged  ATTACH  <device> command  and  have the
          privilege, but the device wasn't detached.

YOU ARE LOCKED OUT OF CORE!

          The amount of user core  available has been reduced by  other jobs
          starting spacewar modules  (thereby being locked in  core).  There
          is not enough room to fit your core image.  This condition may fix
          itself quickly; the message  does not return you to  monitor mode,
          but will keep  appearing every so often  until you fit  again.  If
          you have a really huge program, run it late at night (e.g., 4am).

You can't have it

          You  typed  an ENABLE  command  specifying a  privilege  name, and
          neither the privilege  you specified nor  the PRI privilege  is in
          the list associated with your  PPN; or the privilege is  one which
          is not permitted to any user (XGP or SSL).
                         APPENDIX 12--BIBLIOGRAPHY


This  appendix  lists  various other  sources  of  information  about system
programs.  Some of these are available on the disk, some are  printed.  Some
programs, which were not written  here but came from DEC, are  documented in
DEC manuals.  Other programs, documented on the disk, are not included here;
only   the  major   processors   are  listed.    The   files  AIMS[BIB,DOC],
AIMS.OLD[BIB,DOC], SAILON[BIB,DOC], and PRUNE.DAT[UP,DOC] list other program
documentation which may be of interest.  A convention used in naming [S,DOC]
and [UP,DOC] files  is that the  filename is the  name of the  program being
documented, and  the extension  is the  programmer name  of the  author.  An
update file for a program's documentation will have a file name matching the
program name with the extension being .UPD.

SAILONs (Stanford  Artificial Intelligence  Laboratory Operating  Notes) and
AIMs (Artificial Intelligence Memos) are generally available in printed form
from the project secretaries.  Try this before making your own listing.

EDITORS:

E           E.ALS[UP,DOC] is the manual for the display editor.
SOS         SOS.LES[S,DOC], SAILON 50.3, is the reference manual for SOS.
TECO        This is a DEC program.  See the DECsystem 10 Users Handbook.

LANGUAGE PROCESSORS:

FAIL        FAIL.REG[AIM,DOC], AIM 226, is the reference manual.
SAIL        SAIL.KVL[AIM,DOC], AIM 204.  This  is a long manual; try  to get
            the printed version instead of spooling a copy.
MACRO       This is a DEC  program.  See the DECsystem 10  Assembly Language
            Handbook.
F40         This  is the  DEC FORTRAN.   See the  DECsystem  10 Mathematical
            Languages Handbook.
LISP        Our version of LISP,  LISP 1.6, is described  in LISP.WD[S,DOC],
            SAILON 28.7.
PUB         PUB.TES[S,DOC], SAILON 70, describes the PUB  Document Compiler.
            See also PUB.UPD[S,DOC] for updates.

DEBUGGERS:

RAID        The display terminal  debugger is described  in RAID.PMP[S,DOC],
            SAILON 58.1.
DDT         The Teletype  debugger is  a DEC program;  see the  DECsystem 10
            Assembly  Language Handbook.   See DDT.REG[UP,DOC]  for  a quick
            summary.
BAIL        The SAIL program debugger is described in BAIL.DOC[DOC,AIL], AIM
            270.
                    APPENDIX 13--STANFORD CHARACTER SET


The Stanford ASCII character set  is displayed in the following  table.  The
three digit octal code for a character is composed of the number at the left
of its row plus the digit at  the top of its column.  For example,  the code
for "A" is 100+1 or 101.

                      ASCII  0   1   2   3   4   5   6   7
                        ↓↓↓
                        000  NUL ↓   α   β   ∧   ¬   ε   π
                        010  λ   TAB LF  VT  FF  CR  ∞   ∂
                SIXBIT  020  ⊂   ⊃   ∩   ∪   ∀   ∃   ⊗   ↔
                    ↓↓  030  _   →   ~   ≠   ≤   ≥   ≡   ∨
                    00  040  SP  !   "   #   $   %   &   '
                    10  050  (   )   *   +   ,   -   .   /
                    20  060  0   1   2   3   4   5   6   7
                    30  070  8   9   :   ;   <   =   >   ?
                    40  100  @   A   B   C   D   E   F   G
                    50  110  H   I   J   K   L   M   N   O
                    60  120  P   Q   R   S   T   U   V   W
                    70  130  X   Y   Z   [   \   ]   ↑   ←
                        140  `   a   b   c   d   e   f   g
                        150  h   i   j   k   l   m   n   o
                        160  p   q   r   s   t   u   v   w
                        170  x   y   z   {   |   ALT }   BS

The  tables   below  display   the  standard  ASCII   codes,  and   the  SOS
representation  used  at  Stanford  for  entering  the  full  Stanford ASCII
character set from Teletypes or similar terminals with  restricted character
sets.  The obscure names  for the ASCII codes  below 40 are listed  just for
confusion.  Notes: "DEL" (177) is the ASCII delete.  "ESC" (33) is their alt
mode.  Codes 136 and 137 have two different interpretations, as shown below.
The  SOS representation  is so  called because  it is  provided by  SOS, the
Teletype   editor.    Certain   other   programs   also   know   about  this
representation, but it is not built  into the monitor in any way.   See also
Section 3 for special system treatment of certain characters  from Teletypes
and other non-displays.

                               Standard ASCII

                         0   1   2   3   4   5   6   7

                    000  NUL SOH STX ETX EOT ENQ ACK BEL
                    010  BS  TAB LF  VT  FF  CR  SO  SI
                    020  DLE DC1 DC2 DC3 DC4 NAK SYN ETB
                    030  CAN EM  SUB ESC FS  GS  RS  US
                    040  SP  !   "   #   $   %   &   '
                    050  (   )   *   +   ,   -   .   /
                    060  0   1   2   3   4   5   6   7
                    070  8   9   :   ;   <   =   >   ?
                    100  @   A   B   C   D   E   F   G
                    110  H   I   J   K   L   M   N   O
                    120  P   Q   R   S   T   U   V   W
                    130  X   Y   Z   [   \   ]   ∧↑  _←
                    140  `   a   b   c   d   e   f   g
                    150  h   i   j   k   l   m   n   o
                    160  p   q   r   s   t   u   v   w
                    170  x   y   z   {   |   }   ~   DEL

                               SOS Representation

                         0   1   2   3   4   5   6   7

                    000  --- ?!  ?"  ?#  ?$  ?%  ?&  ?'
                    010  ?(  TAB LF  VT  FF  CR  ?)  ?*
                    020  ?+  ?,  ?-  ?.  ?/  ?0  ?1  ?2
                    030  ?9  ?6  ?4  ?=  ?<  ?>  ?7  ?8
                    040  SP  !   "   #   $   %   &   '
                    050  (   )   *   +   ,   -   .   /
                    060  0   1   2   3   4   5   6   7
                    070  8   9   :   ;   <   =   >   ??
                    100  @   A   B   C   D   E   F   G
                    110  H   I   J   K   L   M   N   O
                    120  P   Q   R   S   T   U   V   W
                    130  X   Y   Z   [   \   ]   ↑   ←
                    140  ?@  ?A  ?B  ?C  ?D  ?E  ?F  ?G
                    150  ?H  ?I  ?J  ?K  ?L  ?M  ?N  ?O
                    160  ?P  ?Q  ?R  ?S  ?T  ?U  ?V  ?W
                    170  ?X  ?Y  ?Z  ?[  ?:  ?3  ?]  BS
                                   INDEX


activation   17
activation character   16, 18
add channel   21
add piece of glass   22
addresses, core   5, 11
ADVANCE command   106
ALGOL   5
alias   19, 29, 31, 32, 35, 45
ALIAS (in WHO display)   42
ALIAS (in WHO line)   19
ALIAS command   32
ALL switch in COPY   72
ALT   17, 24
ALT key   15
alt mode   15, 132
ALT MODE, Teletype   24
APPEND switch in MAIL   88
arguments   7
ARPA network   8, 24, 46, 91, 93, 115
ARPA switch in MAIL   88
ARROW (in TTY command)   24
ARROW (LOGIN option)   34
ASCII   15, 117, 132
ASCII switch in COPY   72
ASK switch in COPY   72
ASK switch in SPOOL   75
assembly language   5
ASSIGN command   8, 30
Associated Press   34, 46
ATT privilege   29, 47
ATTACH command   29, 35, 47
AUDIO (LOGIN option)   34
audio switch   23, 34
authorized users   9
backspace   15
BACKSPACE command   106
backspace, deleting   16
backspace, non-deleting   16
BAIL   48, 131
BAIL switch in SNAIL   58, 65
bams   107
BATCH command   100
BEEP   23
bibliography   131
BINARY switch in COPY   72
binary, relocatable   see relocatable binary
BLOCKED switch in COPY   72
BMAR switch in XSPOOL   79
book mode   49
BREAK   18
BREAK 1 X   19, 24
BREAK A   21
BREAK B   23
BREAK C   21
BREAK D   21
BREAK F   18, 24
BREAK H   21
BREAK key   15
BREAK L   21
BREAK N   20
BREAK O   18
BREAK P   20
BREAK Q   19
BREAK S   21
BREAK T   21
BREAK U   23
BREAK W   19
BREAK X   19, 24
BS   16
BS key   15
CALCOMP   8
CALL   18, 19, 24, 28, 32
CALL key   15
call, deferred   18
cameras, TV   21
CANCEL command   104
CAR device   8
carriage return   15, 17, 24, 34
CC switch in MAIL   88
CCONTINUE command   28
CDETACH command   29
CETV command   10, 49
CFORK command   29
channel number   21
channels, Data Disc   6, 19, 21, 31, 47
channels, private   21, 34
channels, public   21
character set   6, 15, 132
character set, full   18
CLEAR   16
CLEAR key   15
clear line editor   16
CLRUWP command   27
CMQ (job queue)   19
code, character   15, 132
command decoder   7, 15, 16
command files   40
commands, monitor   7
COMPILE command   11, 53
COMPILE switch in SNAIL   53, 57, 65
compiling programs   11
complaints, compliments, criticisms   95
CONLY switch in SNAIL   53, 57, 65
continuable   28
CONTINUE command   19, 28
CONTROL   17, 40
CONTROL key   15, 117
CONTROL key, Teletype   24
CONTROL-B, Teletype   24
CONTROL-BREAK   18, 20
CONTROL-BS   16
CONTROL-C, Teletype   24
CONTROL-CALL   18
CONTROL-CLEAR   18, 20
CONTROL-D   16
CONTROL-FORM   16
CONTROL-I   16
CONTROL-I, Teletype   24
CONTROL-K   16
CONTROL-K, Teletype   24
CONTROL-L, Teletype   24
CONTROL-META-LINE   18
CONTROL-number   16
CONTROL-O, Teletype   24
CONTROL-R   16
CONTROL-RETURN   16, 17
CONTROL-S   16
CONTROL-SPACE   16
CONTROL-TAB   16
CONTROL-U, Teletype   24
CONTROL-Z, Teletype   24
CONVERT switch in COPY   72
COOKIE (LOGIN option)   34
COPY   37, 68
COPY command   37
core   see storage, core
CORE command   27
core image   5, 7, 11, 13, 19, 25, 27, 33, 42
COUNT switch in MAIL   88, 90
CREATE command   49
CREF command   64
CREF switch in SNAIL   57, 64, 65
CSTART command   28
CTRL key, Teletype   24
CTY device   8, 32
cursors   6, 16
DAC device   8
DART   39, 106
data   8
Data Discs   6, 16, 19, 20, 21
DATE (in WHO line)   19
DATE switch in MAIL   88, 89
DAY (in WHO line)   19
DAY filehack in COPY   70
DAYTIME command   7, 31
DCQ (job queue)   19
DD (in WHO line)   19
DDT   27, 28, 48, 58, 131
DDT command   28
DDT switch in SNAIL   58, 65
DDT, Executive   47
DE (deposit) command   27
DEASSIGN command   30
DEBUG command   53
debugging program   see DDT or RAID
DECtape   8, 19, 41, 124
default file protection, UFD's   72
Defense, Department of   115
deferred call   18
delete   15, 132
delete channel   21
DELETE command   37, 73
delete piece of glass   22
DELETE switch in SPOOL   75
deletion of REMINDers, LATER requests, and queued MAIL   104
DENSITY switch in COPY   72
deposit in core   see DE
DET (in WHO display)   42
DET (in WHO line)   19
DETACH command   29, 47
detached jobs   19, 29, 40, 42
DEV privilege   47
device   30, 31, 123
device name   8, 47
device name, logical   8, 30
device name, physical   8, 30
device names, list of   8
DIAL command   46, 117
DIGEST (LOGIN option)   34
DIGEST filehack in COPY   70
DIOW (job queue)   19
directories   8
DIRECTORY command   37, 73
directory device   8, 30
directory, telephone   44
DIRED program   46
DISABLE command   47
disk   8, 19, 26, 30, 31, 32, 37, 39, 41
disk PPN   see alias
display   see terminals, display
DIST switch in MAIL   88
DMP files   8, 11, 26, 65
DO   52, 60
DO command   40
documentation, program   5, 131
DOWN filehack in COPY   70
DRD command   46
DSK device   see disk
DSKOPS (in WHO line)   19
DSKQ (in WHO line)   19
DSPOOL switch in COPY   72
DTA device   see DECtape
DTQ (job queue)   19
DUMP command   106
dump file   see DMP files
DUMP switch in SPOOL   75
DUMPED switch in COPY   72
DWQ (job queue)   19
E   10, 15, 18, 48, 131
E (examine) command   27
E switch in MAIL   88
ECHO (in TTY command)   24
ECHO (LOGIN option)   34
EDDT command   47
EDIT command   49
editing   10
editor, display   10, 49
editor, line   see line editor
ENABLE command   47
end of file   18, 24
EOT command   106
error messages   130
ESC   18
ESC 1 X   19, 24
ESC A   21, 22
ESC B   23
ESC C   21
ESC D   21, 22
ESC E   20
ESC F   18, 24
ESC G   20
ESC H   21
ESC I   18
ESC J   20
ESC key   15
ESC L   20
ESC M   21
ESC N   20
ESC O   18
ESC P   20
ESC Q   19
ESC R   20
ESC S   21, 22
ESC T   21
ESC U   23
ESC W   19, 29
ESC X   19, 24
ESC Y   20
ESCAPE, Teletype   24
ETV command   10, 49
ETV editor   see E
EVEN switch in COPY   72
EVENT command   96
examine core   see E
EXECUTE command   11, 53
EXPAND switch in MAIL   88
extension   8
extensions, standard   8
EXTRA switch in COPY   72
EXTRA switch in SPOOL   75
F4 switch in SNAIL   53, 65
F40   48, 131
FACT.TXT file   75
FAIL   5, 48, 131
FAIL switch in SNAIL   53, 65
FAILED.TXT file   91
FAST (LOGOUT option)   35
FAST switch in COPY   72
FF switch in SPOOL   75
file directory   see directory
file protection   34
file storage   8
File Transfer Protocol   46, 115, 119
filenames   8
FILES command   31
files, disk   8, 19
FILL (in TTY command)   24
FILL (LOGIN option)   34
FIND command   44
FINGER command   12, 35, 45
FINISH command   30
FIXIMLAC command   46, 114
FLUSH command   30, 47
FONT switch in COPY   72
FONT switch in XSPOOL   79
FOO switch in COPY   72
FORK command   29
form feed   15, 24, 70
FORM key   15
FORTRAN   48, 131
FORTRAN switch in SNAIL   65
FORTRAN switch in SPOOL   75
fortune cookie   34
FORWARD switch in SNAIL   60, 65
FTP command   46, 115, 119
FUDGE2   59
FULL (in TTY command)   24
FULL (LOGIN option)   34
full character set mode   18, 34
FULL switch in COPY   72
GET command   26
glass, pieces of   20, 22
glitch   20
graphics   6, 20
GRIPE (LOGIN option)   34
GRIPE command   95
GRIPES filehack in COPY   70
GTOTAL switch in COPY   72
guest account   30, 34
HALT command   28
HEADER switch in COPY   72
HEADER switch in MAIL   88
HEADING switch in SPOOL   75
HELLO command   31
HELP command   12, 45
HIDE (LOGIN option)   34
HOLD switch in SPOOL   75
holding, automatic   18, 20
HOT command   46
I/O   see device
IGNI switch in COPY   72
IGNO switch in COPY   72
III (in WHO line)   19
IIIs   6, 16, 20, 22
IMLAC   46
IMP device   8, 115
Increment (in TIME command)   31
information, system   5, 12, 31, 42
INIT (LOGIN option)   34
input buffer   7, 17, 18, 32, 40
Interface Message Processor   see IMP
interrupt   15
Introduction for New Users   3
Introduction to Terminals   6
INTW (job queue)   19
IOWQ   19, 28
IOWQ (job queue)   19
JBS (in WHO line)   19
JLOG   29, 42, 47
JOB (in WHO display)   42
JOB (in WHO line)   19
Job Data Area   13, 27, 28
job name   26, 42, 45
job number   5, 7, 9, 29, 30, 31, 32, 42, 45
JOBDDT   27, 28
JOBFF   27
JOBNAM (in WHO display)   42
JOBNAM (in WHO line)   19
JOBPC   28
JOBRD   19
JOBREN   28
jobs   19
JOBSA   13, 28
KATTACH command   35
keyboard scanner   15, 18
keyboards   15
KIL privilege   47
KILL command   32, 47
KILL switch in COPY   72
KJOB command   9, 35
KLOG command   35
L switch in E   49
languages, programming   5, 131
LATER command   99
LATER requests, deleting   104
letters, lower case   7, 8, 18, 24
LIBRARY switch in SNAIL   53, 59, 65
LINE   see line feed
LINE (in WHO display)   42
line editor   6, 15, 16, 17, 18, 20
line feed   15, 17, 24
LINE key   15
line number, terminal   21, 31, 42
line numbers, SOS   10, 72, 75
line printer   see printer, line
LINK   48, 116
LINK switch in SNAIL   58, 65
LISP   5, 40, 131
LISP command   46
LIST command   37, 73
LIST switch in COPY   72
LIST switch in MAIL   88
LIST switch in SNAIL   57, 65
LMAR switch in XSPOOL   79
LOAD command   11, 53
LOADER   27, 28, 48, 65
LOADER switch in SNAIL   58, 65
loader switches   62, 66
loading programs   11
local user   34, 46
LOCATE command   106
LOCK   19
LOGGER   116
logical device name   see device name, logical
LOGIN command   5, 7, 9, 34
login, automatic   7
LOGOUT   9, 10, 35
LOGOUT command   35
logout, automatic   5
LOGOUT.MSG file   35
LOGRUN   34
LOGRUN (LOGIN option)   34
LONLY switch in SNAIL   53, 57, 65
lower segment   13
LPT device   see printer, line
LPT0 switch in SPOOL   75
LPT100 switch in SPOOL   75
MACRO   48, 131
MACRO switch in SNAIL   53, 65
magnetic tape   8, 19, 26, 30, 39, 125
MAIL   34, 38, 82, 83
MAIL command   34, 92
MAIL error recovery   101
MAIL filehack in COPY   70
MAIL switch in MAIL   88
mail, ARPA network   91
mail, deleting queued   104
MAIL, interfacing with, from other programs   103
MAIL.TXT file   84, 101
maintenance mode   34
MAKE command   49
MAP switch in SNAIL   58, 65
mapping   21
ME (LOGIN option)   34
ME (LOGOUT option)   35
memory stops   128
MESSAG (LOGIN option)   34
messages, sending and mailing   83
messages, system   9, 34, 92, 96
META   16, 17, 40
META key   15
META-BS   16
META-CALL   18
MICRO-PLANNER   5
MLENGTH switch in COPY   72
MODE switch in SPOOL   75
monitor mode   7, 9, 15, 18, 26, 28, 29, 32
MSG filehack in COPY   70
MTA device   see magnetic tape
MTQ (job queue)   19
Multics   119
N switch in E   49
NAP filehack in COPY   70
NARROW switch in SPOOL   75
NCP   116
New York Times   46
news service   see NS
NL (in WHO line)   19
NO switch in MAIL   88
NOARROW (LOGIN option)   34
NOCMFI switch in SNAIL   53, 65
NOCOPY switch in SPOOL   75
NODELETE switch in SPOOL   75
NODIST switch in MAIL   88
NODMP switch in SNAIL   53, 58, 65
NODUMP switch in SNAIL   58
NODUMP switch in SPOOL   75
NOECHO (LOGIN option)   34
NOFF switch in COPY   72
NOFF switch in SPOOL   75
NOFILL (LOGIN option)   34
NOFORTRAN switch in SPOOL   75
NOFULL (LOGIN option)   34
NOHEADING switch in SPOOL   75
NOLOAD switch in SNAIL   53, 60, 65
NOMAIL (LOGIN option)   34
NOMAIL switch in MAIL   88
NONARROW switch in SPOOL   75
NONUMBER switch in SPOOL   75
NONUMBERS switch in COPY   72
normal activation mode   17
NOSAISEG switch in SNAIL   58, 65
NOSPACES switch in COPY   72
NOTABS (LOGIN option)   34
NOTICE filehack in COPY   70
NOTICE.TXT file   34, 92, 96, 105
NOTITLE switch in SPOOL   75
NOWARN switch in SPOOL   75
NOXGP switch in XSPOOL   79
NS   34, 105
NS command   46
NS filehack in COPY   70
NTNODE switch in XSPOOL   79
null job   31, 42
null-time   19
NULQ (job queue)   19
NUMBER switch in SPOOL   75
number, line   see line numbers
NVNODE switch in XSPOOL   79
OCTAL switch in SPOOL   75
ODD switch in COPY   72
OFFSET switch in COPY   72
old mode (UDP)   30
operator   32
OPTIMIZE switch in COPY   72
OPTION filehack in COPY   70
OPTION.TXT file   34, 35, 105
OUTGO.MSG file   85, 105
output buffer   18
P switch in E   49
page printer   20, 22
Page-Seconds   31
pages   13
paging, telephone   23
PAL   48
PALX switch in SNAIL   53, 65
paper tape   8
paper, pieces of   20
password   34, 41
PDP-10   4, 5, 15, 19, 42
PDP-10 console   8, 32, 47
PDP-6   19, 42
PGX pseudo-device (COPY)   71
phantom   29, 42, 47
physical device name   see device name, physical
pieces of glass   20
pieces of paper   20
PJOB command   31
PL (in WHO display)   42
PLAN command   97
plan file   45, 70, 97, 105
PLAN filehack in COPY   70, 97
PLN filehack in COPY   70, 97
plotter   8
PMAR switch in XSPOOL   79
PORNO (LOGIN option)   34
POX   48
POX command   51
PPN   5, 8, 9, 19, 29, 31, 32, 34, 35, 45, 47
PPN (in WHO display)   42
PPN (in WHO line)   19
PPN, disk   see alias
PPPN command   31
PREFIX, Teletype   24
PREPARE command   53
PRI privilege   47
PRINT command   37, 73
printer, line   8, 30, 37, 73, 75, 123
private device   30
privileged commands   47
PROCESS command   52
PROCESSOR switch in SNAIL   60, 65
programmer name   5, 19, 32, 38, 45
programs, display   20, 22
programs, system   5, 25, 26, 33
programs, system information   7, 12
project name   5
project-programmer name   see PPN
protection   34
PROTECTION switch in COPY   72
PS (in TIME command)   31
pseudo-teletype   see PTY
PTP device   8
PTR device   8
PTTY command   31
PTY   8, 35, 42
PTYJOB   117
PUB   46, 48, 131
PUB command   51
public device   30
QMAINT (LOGIN option)   34
QSPOOL   80
QSPOOL command   37
queue   45
QUEUE (in WHO display)   42
QUEUE (in WHO line)   19
queue names   19
QUEUE switch in MAIL   88
queued local mail   92
queued mail   88, 91, 92, 98
queued mail, deleting   104
QUIET switch in COPY   72
R (in WHO line)   19
R command   26, 33
R switch for editors   49
RAID   27, 28, 48, 58, 131
RAID switch in SNAIL   58, 65
RCOR (in WHO line)   19
RCV   105
READ command   49
REASSIGN command   30
RECOPY switch in SPOOL   75
records   8
REENTER command   28
REFERENCED switch in COPY   72
refresh   20
REL files   8
REL switch in SNAIL   53, 65
reloading   129
relocatable binary   8, 11
REMIND command   94
reminders, deleting   104
remote terminal   24
RENAME command   37, 73
RENAME switch in COPY   72
REPEAT switch in SPOOL   75
request for connection   116
request for new message   116
RER command   52
RERUN command   52
RESET   20, 26, 27
RESOURCES command   31
RESTORE command   106
retrieve last line   16
RETRY command   98
RETURN   see carriage return, 17
RETURN key   15, 16
REWIND command   106
RFC   116
RFNM   116
RMAR switch in XSPOOL   79
RP (in WHO line)   19
RPG   35, 40
RPG filehack in COPY   70
RPGSAV (LOGOUT option)   35
RSL command   46, 107
RTIME   19
RUBOUT, Teletype   24
RUN command   26
run time   31, 42, 45
running programs   11, 26
RUNQ (job queue)   19
RUNTIME (in WHO line)   19
runtime, incremental   19
SAI files   8
SAIL   5, 48, 131
SAIL switch in SNAIL   53, 65
SAVE command   27
SAVE switch in COPY   72
SAVE switch in SNAIL   58, 65
SAVED.MSG file   105
scanner, keyboard   see keyboard scanner
scrolling   20
SEARCH switch in COPY   72
SEG (in WHO display)   42
segment, lower   see lower segment
segment, upper   see upper segment
segments   13
SEGNAM (in WHO line)   19
select audio channel   23
select channel   21
select piece of glass   22
SEND command   93
SEND switch in MAIL   88
service level   31, 42, 46
SETPR2   130
SETUWP command   27
SHIFT key, Teletype   24
SHIFT keys   6, 15
SHIFT LOCK key   6, 15, 18
SIZE (in WHO display)   42
SIZE (in WHO line)   19
SL (in WHO display)   42
SLEEP   19
SLEVEL command   31
SNAIL   10, 36, 48
SNDMSG   see MAIL program
SOCKET   116
SOS   10, 48, 49, 131
SOS representation   24
Spacewar   5
spacewar module   19, 42
special activation mode   17
SPOOL command   37, 75
SPOOL switch in COPY   72
spoolers   37, 71
SSAVE command   27
Stanford ASCII   15
START command   28
starting programs   28
status, system   19
STOP (job queue)   19
stop typeout   18, 24
storage, core   5, 13, 19, 128
SUBJECT switch in MAIL   88
suspend typeout   18, 24
SW10 (in WHO display)   42
SW6 (in WHO display)   42
switch, audio   see audio switch
switch, video   see video switch
SYS device   8, 26, 30
SYSTAT command   45
system messages   92, 96
system programs   26
system WHO line   see WHO line
TAB   16, 24
TAB key   15
TABS (in TTY command)   24
TABS (LOGIN option)   34
tabs, hardware   24
TALK command   32, 47
talk ring   32
tape, magnetic   see magnetic tape
tape, paper   8
TCOR (in WHO line)   19
TECO   10, 48, 49, 131
TECO command   49
Teletypes   6, 10, 24, 34, 42, 46, 71
TELNET   46, 115, 116, 117
TELNET command   46, 115, 117
terminal   7, 8, 24
terminals   24
terminals, display   6, 15, 20, 42
TEST command   46
text nodes   79
tick   19, 42
TIME (in TTY command)   24
TIME (in WHO display)   42
TIME (in WHO line)   19
TIME command   31
TIME switch in COPY   72
TIME switch in MAIL   88, 89
timesharing   4
TITLE switch in COPY   72
TITLE switch in SPOOL   75
TLIST command   106
TLK privilege   47
TMAR switch in XSPOOL   79
TMPCOR   35
TN command   46, 115, 117
TOP key   6, 15
TPL pseudo-device (COPY)   71
TQ (job queue)   19
TRANSFER command   37, 73
TRY command   53
TTY (in WHO line)   19
TTY command   24
TTY device   see terminal; Teletypes
TTYUUO   24
TV device   8
TV, lounge   21
TYPE command   37, 73
typeahead   7
UCOR (in WHO line)   19
UDP   8, 30, 31, 41, 46, 71, 127
UDPUFD command   46
UFD   8
UFD protection   72
UFDPRO switch in COPY   72
UNHIDE (LOGIN option)   34
UNSPOOL   81
UNSPOOL command   37
UPDATE (in TTY command)   24
upper segment   13, 19, 27, 42
user disk pack   see UDP
User File Directory   8
user mode   7, 28
user, authorized   9
UTPCLR   41
UUOs   4, 5, 17
vector   6
vector nodes   79
vertical position   20
vertical tab   15
video switch   21
volleyball players   85
VT   24
VT key   15
Wait (in TIME command)   31
WAIT switch in COPY   72
wait time   19
WARN switch in SPOOL   75
whams   107
WHERE command   12, 45
WHERE switch in MAIL   88
WHO (in TTY command)   24
WHO (LOGIN option)   34
WHO command   7, 12, 42
WHO line   6, 19, 24, 29, 31, 34, 42
WIDTH (in TTY command)   24
WIDTH (LOGIN option)   34
WRITER switch in COPY   72
XEROX command   46
Xerox Graphics Printer   see XGP
XFACT.TXT file   75
XGP   8, 37, 75, 79, 126
XGP switch in XSPOOL   79
XGPLIST command   37, 73
XLINE switch in XSPOOL   79
XP (in WHO line)   19
XSPOOL command   37, 75, 79
XTIME   19, 24
XTIME (in WHO line)   19
YESMAIL switch in MAIL   88
ZERO command   41